[Android Studio] メモ帳を作ろう!(その2)

どうも、tatsuです!

今回はメモ帳アプリ制作その2ということで作っていこうと思います。
わからない箇所は他の記事を参考にしてみてください。

※この記事で使用しているAndroid Studioのバージョンは2.3.3です。

作成手順

メモ帳アプリを作る上で必要な手順を以下にまとめました。
本記事では③を紹介します。
①と②は以下の記事を参照してください。

[Android Studio] メモ帳を作ろう!(その1)

2017.09.01
  1. 新しくプロジェクトを作る
  2. 画面レイアウトを作る
  3. 画面に動きをつける
  4. データベースに保存する
  5. テスト&手直し
  6. 完成物披露

③画面に動きをつける

さて、前回画面レイアウトを作成したので、今回はロジックを書いていきます。
※データベース接続処理は別の記事で説明するのでToDoにしています。

ListActivity.java

リスト項目をクリックした時にCreateMemoActivity.javaに遷移する処理を書いていきます。
今回はデータベースに保存したデータを特定するためのIDをクリック時に送信するようにしました。

public class ListActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_list);

        // ToDo:データベースから値を取得する
        // 仮のデータを作成
        ArrayList<HashMap<String, String>> tmpList = new ArrayList<>();
        for(int i = 1; i <=  5; i++){
            HashMap<String,String> data = new HashMap<>();
            // 引数には、(名前,実際の値)という組合せで指定します 名前はSimpleAdapterの引数で使用します
            data.put("body","サンプルデータ"+i);
            data.put("id","sampleId"+i);
            tmpList.add(data);
        }

        // Adapter生成
        // ToDo:tmpListを正式なデータと入れ替える
        SimpleAdapter simpleAdapter = new SimpleAdapter(this,
                tmpList, // 使用するデータ
                android.R.layout.simple_list_item_2, // 使用するレイアウト
                new String[]{"body","id"}, // どの項目を
                new int[]{android.R.id.text1, android.R.id.text2} // どのidの項目に入れるか
        );

        // idがmemoListのListViewを取得
        ListView listView = (ListView) findViewById(R.id.memoList);
        listView.setAdapter(simpleAdapter);

        // リスト項目をクリックした時の処理
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){
            /**
             * @param parent ListView
             * @param view 選択した項目
             * @param position 選択した項目の添え字
             * @param id 選択した項目のID
             */
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                // インテント作成  第二引数にはパッケージ名からの指定で、遷移先クラスを指定
                Intent intent = new Intent(ListActivity.this, com.android.tatsu.simplememo.CreateMemoActivity.class);

                // 選択されたビューを取得 TwoLineListItemを取得した後、text2の値を取得する
                TwoLineListItem two = (TwoLineListItem)view;
                TextView idTextView = (TextView)two.getText2();
                String isStr = (String) idTextView.getText();
                // 値を引き渡す (識別名, 値)の順番で指定します
                intent.putExtra("id", isStr);
                // Activity起動
                startActivity(intent);
            }
        });


        /**
         * 新規作成するボタン処理
         */
        // idがnewButtonのボタンを取得
        Button newButton = (Button) findViewById(R.id.newButton);
        // clickイベント追加
        newButton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // CreateMemoActivityへ遷移
                Intent intent = new Intent(ListActivity.this, com.android.tatsu.simplememo.CreateMemoActivity.class);
                intent.putExtra("id", "");
                startActivity(intent);
            }
        });
    }
}

CreateMemoActivity.java

CreateMemoActivity.javaでは、登録処理と戻る処理を記述していきます。

public class CreateMemoActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_create_memo);

        // ListActivityからインテントを取得
        Intent intent = this.getIntent();
        // 値を取得
        String id = intent.getStringExtra("id");
        // 画面に表示
        if(id.equals("")){
            // 新規作成の場合

        }else{
            // 編集の場合

        }

        /**
         * 登録ボタン処理
         */
        // idがregisterのボタンを取得
        Button registerButton = (Button) findViewById(R.id.register);
        // clickイベント追加
        registerButton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // 入力内容を取得する
                EditText body = (EditText)findViewById(R.id.body);
                String bodyStr = body.getText().toString();

                // ToDo:データベースに保存する

                // 保存後に一覧へ戻る
                Intent intent = new Intent(CreateMemoActivity.this, com.android.tatsu.simplememo.ListActivity.class);
                startActivity(intent);
            }
        });


        /**
         * 戻るボタン処理
         */
        // idがbackのボタンを取得
        Button backButton = (Button) findViewById(R.id.back);
        // clickイベント追加
        backButton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // 保存せずに一覧へ戻る
                finish();
            }
        });
    }
}

まとめ

今回は「③画面に動きをつける」を紹介しました!
この段階で以下のことができるようになっていると思いますので確認してみてください。

  • 新規作成ボタン又はリスト項目を選択するとメモ作成画面へ遷移する
  • メモ作成画面でボタンをクリックするとリスト画面へ遷移する
続きは次回にしていきます。

[Android Studio] 実機でAndroidアプリを起動する

2018.08.15

[Android Studio] メモ帳を作ろう!(その3)

2017.09.03

2 件のコメント

  • こんにちは。アプリ開発を勉強中の者です。
    参考にさせていただいております。

    一覧へ戻るをintentで行なっていますが、
    finishの方がスッキリして良いのではないでしょうか?

    • 確かに戻るだけなので、登録しない方はfinish()でいいと思います。
      私の勉強不足でした、ご指摘ありがとうございます!

      ただ、登録する方は戻ってきてからonCreate処理が走ってほしいのでintentにしています。

  • コメントを残す

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です