2.9.2 ソース2 (クラスファイル)

これまで作成してきたメモアプリの完成版のソースと、各ファイルについて簡単な説明をします。
クラスファイルとしては、以下となります。

・ クラスファイル(*.java)
  - MainActivity.java (メイン画面クラス)
  - EditActivity.java (編集画面クラス)

それぞれのファイルの完成ソースをのせていきます。

メイン画面クラス

メイン画面クラス(MainActivity.java)では、保存されているメモのファイルを読み込みリストに表示します。
また、メニューから新規作成で編集画面の表示、リスト選択でメモの編集画面表示、リスト長押しでリスト削除等の処理を行います。
MainActivity.java

public class MainActivity extends Activity {
    // ListView 用アダプタ
    SimpleAdapter mAdapter = null;
    // ListView に設定するデータ
    List<Map<String, String>> mList = null;
	

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        // ListView 用アダプタのリストを生成
        mList = new ArrayList<Map<String, String>>();
        
        // ListView 用アダプタを生成
        mAdapter = new SimpleAdapter(
                this,
                mList,
                android.R.layout.simple_list_item_2,
                new String [] {"title", "content"},
                new int[] {android.R.id.text1, android.R.id.text2}
                );
        
        // ListView にアダプターをセット
        ListView list = (ListView)findViewById(R.id.listView);
        list.setAdapter(mAdapter);
        
        // ListView のアイテム選択イベント
        list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(
                    AdapterView<?> parent, View view, int pos, long id) {
                // 編集画面に渡すデータをセットし、表示
                Intent intent = new Intent(MainActivity.this, EditActivity.class);
                intent.putExtra("NAME", mList.get(pos).get("filename"));
                intent.putExtra("TITLE", mList.get(pos).get("title"));
                intent.putExtra("CONTENT", mList.get(pos).get("content"));
                startActivity(intent);
            }
        });
        
        // ListView をコンテキストメニューに登録
        registerForContextMenu(list);
    }
	
	
    @Override
    protected void onResume() {
        super.onResume();

        // ListView 用アダプタのデータをクリア
        mList.clear();
                
        // アプリの保存フォルダ内のファイル一覧を取得
        String savePath = this.getFilesDir().getPath().toString();
        File[] files = new File(savePath).listFiles();
        // ファイル名の降順でソート
        Arrays.sort (files, Collections.reverseOrder());
        // テキストファイル(*.txt)を取得し、ListView用アダプタのリストにセット
        for (int i=0; i<files.length; i++) {
            String fileName = files[i].getName();
            if (files[i].isFile() && fileName.endsWith(".txt")) {
                String title = null;
                String content = null;
                // ファイルを読み込み
                try {
                    // ファイルオープン
                    InputStream in = this.openFileInput(fileName);
                    BufferedReader reader = new BufferedReader(new InputStreamReader(in, "UTF-8"));
                    // タイトル(1行目)を読み込み
                    title = reader.readLine();
                    // 内容(2行目以降)を読み込み
                    char[] buf = new char[(int)files[i].length()];
                    int num = reader.read(buf);
                    content = new String(buf, 0, num);
                    // ファイルクローズ
                    reader.close();
                    in.close();
                } catch (Exception e) {
                    Toast.makeText(this, "File read error!", Toast.LENGTH_LONG).show();
                }
                
                // ListView用のアダプタにデータをセット
                Map<String, String> map = new HashMap<String, String>();
                map.put("filename", fileName);
                map.put("title", title);
                map.put("content", content);
                mList.add(map);
            }
        }
        
        // ListView のデータ変更を表示に反映
        mAdapter.notifyDataSetChanged();
    }
	

    // メニュー作成処理
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
    
    // メニュー選択処理
    @Override
    public boolean onMenuItemSelected(int featureId, MenuItem item) {
        switch(item.getItemId()) {
        case R.id.action_add:
            // [追加] 選択時の処理
            // 編集画面を表示
            Intent intent = new Intent(MainActivity.this, EditActivity.class);
            startActivity(intent);
            break;
        default:
            break;
        }
        
        return super.onMenuItemSelected(featureId, item);
    }
	

    // コンテキストメニュー作成処理
    @Override
    public void onCreateContextMenu(ContextMenu menu, View view, ContextMenuInfo info) {
        super.onCreateContextMenu(menu, view, info);
        getMenuInflater().inflate(R.menu.main_context, menu);
    }
    
    // コンテキストメニュー選択処理
    @Override
    public boolean onContextItemSelected(MenuItem item) {
        AdapterContextMenuInfo info = (AdapterContextMenuInfo)item.getMenuInfo();
        switch(item.getItemId()) {
        case R.id.context_del:
            // [削除] 選択時の処理
            // ファイル削除
            if (this.deleteFile(mList.get(info.position).get("filename"))) {
                Toast.makeText(this, R.string.msg_del, Toast.LENGTH_SHORT).show();
            }
            // リストから削除
            mList.remove(info.position);
            // ListView のデータ変更を表示に反映
            mAdapter.notifyDataSetChanged();
            break;
        default:
            break;
        }
        
        return false;
    }
}

編集画面クラス

編集画面クラス(EditActivity.java)では、入力されたテキストの内容をファイルに保存します。
また、メニューからファイルの削除処理を行います。
EditActivity.java

public class EditActivity extends Activity {
    // 保存ファイル名
    String mFileName = "";
    // 保存なしフラグ
    boolean mNotSave = false;
	
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_edit);
        
        // タイトルと内容入力用の EditText を取得
        EditText eTxtTitle = (EditText)findViewById(R.id.eTxtTitle);
        EditText eTxtContent = (EditText)findViewById(R.id.eTxtContent);
        
        // メイン画面からの情報受け取り、EditTextに設定
        // (情報がない場合(新規作成の場合)は、設定しない)
        Intent intent = getIntent();
        String name = intent.getStringExtra("NAME");
        if (name != null) {
            mFileName = name;
            eTxtTitle.setText(intent.getStringExtra("TITLE"));
            eTxtContent.setText(intent.getStringExtra("CONTENT"));
        }
    }
    
    @Override
    protected void onPause() {
        super.onPause();
        
        // [削除] で画面を閉じるときは、保存しない
        if (mNotSave) {
            return;
        }
        
        // タイトル、内容を取得
        EditText eTxtTitle = (EditText)findViewById(R.id.eTxtTitle);
        EditText eTxtContent = (EditText)findViewById(R.id.eTxtContent);
        String title = eTxtTitle.getText().toString();
        String content = eTxtContent.getText().toString();
        
        // タイトル、内容が空白の場合、保存しない
        if (title.isEmpty() && content.isEmpty()) {
            Toast.makeText(this, R.string.msg_destruction, Toast.LENGTH_SHORT).show();
            return;
        }
        
        // ファイル名を生成  ファイル名 : yyyyMMdd_HHmmssSSS.txt
        // (既に保存されているファイルは、そのままのファイル名とする)
        if (mFileName.isEmpty()) {
            Date date = new Date(System.currentTimeMillis());
            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmssSSS", Locale.JAPAN);
            mFileName = sdf.format(date) + ".txt";
        }
        
        // 保存
        OutputStream out = null;
        PrintWriter writer = null;
        try{
            out = this.openFileOutput(mFileName, Context.MODE_PRIVATE);
            writer = new PrintWriter(new OutputStreamWriter(out,"UTF-8"));
            // タイトル書き込み
            writer.println(title);
            // 内容書き込み
            writer.print(content);
            writer.close();
            out.close();
        }catch(Exception e){
            Toast.makeText(this, "File save error!", Toast.LENGTH_LONG).show();
        }
    }
    
    
    // メニュー生成
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.edit, menu);
        return true;
    }
    
    // メニュー選択時の処理
    @Override
    public boolean onMenuItemSelected(int featureId, MenuItem item) {
        switch(item.getItemId()) {
        case R.id.action_del:
            // [削除] 選択処理
            // ファイル削除
            if (!mFileName.isEmpty()) {
                if (this.deleteFile(mFileName)) {
                    Toast.makeText(this, R.string.msg_del, Toast.LENGTH_SHORT).show();
                }
            }
            // 保存せずに、画面を閉じる
            mNotSave = true;
            this.finish();
            break;
        default:
            break;
        }
        
        return super.onMenuItemSelected(featureId, item);
    }
}



メモアプリの作成についての説明は以上となります。