2011年4月13日水曜日

Android ListViewで選択させ次のActivityに渡す

タイトルの通りでListViewでいくつか選択させて次のActivityに引き継ぐ方法の1つ。

Listは先日の「ListView positionによってViewを変える 」で使用した小説のリストを使用。
List内にCheckBox isSelectedを用意して、Adapterでは下記のような感じで適当に。
            holder.isSelected.setChecked(novel.isSelected());
            holder.isSelected.setTag(novel);
            holder.isSelected.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View arg0) {
                    CheckBox cb = (CheckBox) arg0;
                    Novel novel = (Novel) cb.getTag();
                    novel.setSelected(cb.isChecked());
                }
            });

あとは何らかのイベントでリストをループで回して、isSelectedを見て必要なやつを次に渡してやればOK。
今回はボタンを用意して、クリックリスナーでの処理にした。
        ArrayList purcahse_novels = new ArrayList();
        for (Novel novel: novels) {
            if (novel.isSelected()) {
                purcahse_novels.add(novel);
            }
        }
        Intent intent = new Intent(this, PurchaseAct.class);
        intent.putExtra("PURCASE_NOVELS", purcahse_novels);
        startActivity(intent);

あとは、次のアクティビティで受け取って処理するだけ。

        Intent intent = getIntent();
        ArrayList<Novel> novels = (ArrayList<Novel>) intent.getSerializableExtra("PURCASE_NOVELS");
        TextView purchaseMessage = (TextView) findViewById(R.id.purchase_message);
        String message = "これらの小説を購入しました.\n";
        for (Novel novel: novels) {
            message += "・" + novel.getTitle() + "\n";
        }
        purchaseMessage.setText(message);

意外と簡単。

チェックボックスとか、ボタンとか、スピナーとかデフォルトだとなんかアプリが味気ない。
素材作ってデザインも覚えていかないとAndroidアプリを作れるようになったとは言えないのかな。
まだまだ覚えることが多いな。