为数组中的多个项设置onClick侦听器

时间:2011-08-15 19:23:24

标签: android dialog onclick selectlist custom-lists

我正在尝试实现一个选择列表。每个项目都是一个imageview。
当用户单击视图时,将打开一个自定义对话框,显示列表中的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听众 谢谢。

1 个答案:

答案 0 :(得分:0)

对于初学者,我会在调用dialog.show()之前放置for( ... )循环。

要回答更一般的问题,请查看方法ListView.setOnItemClickListener()http://developer.android.com/reference/android/widget/AdapterView.html#setOnItemClickListener(android.widget.AdapterView.OnItemClickListener)。

您只需在ListView上注册一个侦听器。单击ListView中的项目时,您最终会进入void onItemClick(AdapterView<?> parent, View view, int position, long id)下的代码。该位置将是单击行的索引(对应于循环中的i)。