0

選択リストを実装しようとしています。各アイテムはイメージビューです。
ユーザーがビューをクリックすると、カスタム ダイアログが開き、56 個の ImageView がリストに表示されます。
その後、ユーザーはいずれかをクリックして選択できます。
イメージビューには、items_r1_c1 ... items_r56_c1 のような名前のイメージがあります。
各イメージビューに onClickListeners を実装する必要があります。
代わりに私はこれをしました:

private int i; // This is int the outer class.
...
private ImageView [] spec = new ImageView[56];
myView.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                //set up dialog
                try {
                    final Dialog dialog = new Dialog(context);
                    dialog.setContentView(R.layout.myCustomList);
                    dialog.setTitle("Select one of 56");
                    dialog.setCancelable(true);
                    dialog.show(); 

                    String s = null;

                    //This is where I automate the ImageView object creation
                    for (i=2; i<=56; i++) {

                        s = "items_r"+Integer.toString(i)+"_c1";
                        spec[i] = (ImageView) findViewById(getResources().getIdentifier(s,"drawable",getPackageName()));

                        spec[i].setOnClickListener(new OnClickListener() {                      
                            @Override
                            public void onClick(View v) {
                                myItem.setItem(Integer.toString(i));
                                if(i == 0) myItem.setItem("invalid");
                                Log.e(tag, myItem.getItem());
                                dialog.dismiss();

                            }
                        });
                    }  
                } catch (Exception e) {
                    Log.e(tag, e.toString());
                }
            }

ただし、期待した動作が得られません。
私は何を間違っていますか?56個のonClickリスナーを書く代わりに、これを行う効率的な方法は何ですか?
ありがとうございました。

4

1 に答える 1

0

手始めにfor( ... )、dialog.show() の呼び出しの前にループを配置します。

より一般的な質問に答えるには、メソッド ListView.setOnItemClickListener() http://developer.android.com/reference/android/widget/AdapterView.html#setOnItemClickListener(android.widget.AdapterView.OnItemClickListener ) を見てください。

ListView にリスナーを 1 つ登録するだけで済みます。ListView 内の項目をクリックすると、 の下のコードになりますvoid onItemClick(AdapterView<?> parent, View view, int position, long id)。位置は、クリックされた行のインデックスになります (ループの i に対応)。

于 2011-08-15T21:17:42.030 に答える