1

我有 1 个 ListView 和两个 ArrayAdapters

根据 if 语句,这将发生

listView1.setAdapter(adapter1); 或者 listView1.setAdapter(adapter2);

在 onCreate() 上,这被称为, listView1.setAdapter(adapter1);

所以 listView1.setOnItemClickListener() 连接到适配器 1。

在程序执行期间,当listView1.setAdapter(adapter2);被调用时,ListView 会更新并且显示会显示相应的结果,但是,单击具有适配器 2 结果的项目实际上仍然引用适配器 1 结果。

当 listView1 的适配器发生变化时,如何让 onItemClickListener 切换?

谢谢

        listView1.setOnItemClickListener(new OnItemClickListener() {

        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {


            Intent i = new Intent("com.project.DetailView");
            i.putExtra("serial", list.get(position).getSerial());
            i.putExtra("name", list.get(position).getName());

            startActivity(i);

        }
    });

}


adapter1 = new ArrayAdapter<Object>(this, android.R.layout.simple_list_item_1, list1);

adapter2 = new ArrayAdapter<Object>(this, android.R.layout.simple_list_item_1, list2);
4

3 回答 3

1

onItemClick 中的代码,对适配器没有任何依赖,它对列表有依赖。我认为你应该覆盖getItem这两个适配器的方法,而不是getItem从适配器中逐个列表获取,如果你从 HashMap 返回getItem(int position),那么你应该修改你的方法如下:

listView1.setOnItemClickListener(new OnItemClickListener() {

        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

            HashMap<String, String> item=getAdapter().getItem(position);

            Intent i = new Intent("com.project.DetailView");
            i.putExtra("serial", item.get("serial"));
            i.putExtra("name", item.get("name"));

            startActivity(i);

        }
于 2012-07-31T04:28:12.093 回答
0

当您设置适配器执行此操作时,

适配器1.notifyDataSetChanged();

或者

adapter2.notifyDataSetChanged();

如果它不起作用,请发布您的代码以了解您到底做了什么。

于 2012-07-31T04:33:38.583 回答
0

这段代码可以帮助你。

listView.setOnItemClickListener(new OnItemClickListener() {

            public void onItemClick(AdapterView<?> arg0, View arg1, int position,
                    long id) {
                // TODO Auto-generated method stub
                Log.i("item",""+listView.getItemAtPosition(position));

            }
        });
于 2012-07-31T05:26:30.147 回答