1

私は1つのListViewと2つのArrayAdapterを持っています

if ステートメントによっては、これが発生します

listView1.setAdapter(adapter1); また listView1.setAdapter(adapter2);

onCreate() では、これが呼び出されます。 listView1.setAdapter(adapter1);

したがって、listView1.setOnItemClickListener() はアダプター 1 に接続されます。

プログラムの実行中にlistView1.setAdapter(adapter2);が呼び出されると、ListView が更新され、適切な結果が表示されますが、adapter2 の結果を持つ項目をクリックすると、実際にはまだ adapter1 の結果が参照されます。

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これら2つのアダプターの両方のメソッドをオーバーライドする必要があると思います。アダプター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

このコードはあなたを助けるかもしれません。

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 に答える
0

アダプターを設定するときは、これを行います。

adapter1.notifyDataSetChanged();

また

adapter2.notifyDataSetChanged();

それでもうまくいかない場合は、コードを投稿して、正確に何をしたかを確認してください。

于 2012-07-31T04:33:38.583 に答える