Android:如何在列表视图中为动态创建的项设置侦听器

时间:2014-01-11 20:19:36

标签: android listview onclicklistener

我有列表视图,根据名称列表填充其项目。我已经在列表视图中添加了一个适配器并设置了项目。这是代码:

    items = new String[]{ "Apple", "Banana" };
    list = (ListView)findViewById(R.id.fruits_listView);

    list.setAdapter(new ArrayAdapter<String>(this, R.layout.list_fruits, R.id.list_fruits_textView, items) {

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {

            View v = super.getView(position, convertView, parent);
            ImageView imageView = (ImageView)v.findViewById(R.id.list_fruits_imageView);

            // Change icon based on name and set click listener for it
            String s = items[position];

            if (s.equals("Apple"))
            {
                imageView.setImageResource(R.drawable.apple);
                imageView.setOnClickListener(appleListener);
            }
            else if (s.equals("Banana"))
            {
                imageView.setImageResource(R.drawable.banana);
                imageView.setOnClickListener(bananaListener);
            }

            return v;
        }
    });

    // Setup listeners
    appleListener = new OnClickListener() {

        @Override
        public void onClick(View v) {
            startActivity(new Intent(this, Apple.class));
        }
    };

    bananaListener = new OnClickListener() {

        @Override
        public void onClick(View v) {
            startActivity(new Intent(this, Banana.class));
        }
    };

然而,当我点击列表项时没有任何反应,似乎听众不起作用。知道我的问题是什么吗?

1 个答案:

答案 0 :(得分:0)

这很简单,只需在设置适配器之前初始化您的侦听器。
我希望这能解决你的问题。

修改:
ListView

中设置这些属性
android:focusable="false"
android:focusableInTouchMode="false"
android:descendantFocusability="blocksDescendants" 

还可以点击ImageView(s)

yourImageViewObject.setClickable(true);