0

私はlistViewを持っています、それは約100のアイテムを持っています。

現在私はこのコードを持っています:

public class VanillaList extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.vanilla_block_list);

        ArrayList<ItemDetails> image_details = GetSearchResults();

        final ListView lv1 = (ListView) findViewById(R.id.listV_main);
        lv1.setAdapter(new ItemListBaseAdapter(this, image_details));

        lv1.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> a, View v, int position, long id) { 
                Object o = lv1.getItemAtPosition(position);
                ItemDetails obj_itemDetails = (ItemDetails)o;
                Toast.makeText(VanillaList.this, "You have clicked on : " + " " + obj_itemDetails.getName(), Toast.LENGTH_LONG).show();
            }  
        });
    }

これは、リスト項目の名前の前に「クリックしました:」と書かれたトースト通知を示しています。

これは、100アイテムすべてに当てはまります。アイテムごとに異なるonClickメソッドを作成するにはどうすればよいですか。私が試してみました:

public class VanillaBlockList extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.vanilla_block_list);

        ArrayList<ItemDetails> image_details = GetSearchResults();

        final ListView lv1 = (ListView) findViewById(R.id.listV_main);
        lv1.setAdapter(new ItemListBaseAdapter(this, image_details));

        lv1.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> a, View v, int position, long id) { 
                Object o = lv1.getItemAtPosition(position);
                ItemDetails obj_itemDetails = (ItemDetails)o;
                Toast.makeText(VanillaBlockList.this, "You have chosen : " + " " + obj_itemDetails.getName(), Toast.LENGTH_LONG).show();
            }  
lv2.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> a, View v, int position, long id) { 
                Object o = lv2.getItemAtPosition(position);
                ItemDetails obj_itemDetails = (ItemDetails)o;
                Toast.makeText(VanillaBlockList.this, "You have chosen : " + " " + obj_itemDetails.getName(), Toast.LENGTH_LONG).show();
            } 
        });
    }

しかし、これは私にはうまくいきませんでした。誰か助けてもらえますか?レイアウトXMLファイルのようにonClickメソッドを使用したいandroid:onClick="something"

次に、Javaファイルで:

public void something{
//method here
}

ありがとう。

4

3 に答える 3

2

スイッチを使用するまたは

 if(obj_itemDetails.getName().equals("choice 1"){
  /* Do somes Struff*/ }
于 2012-08-27T12:13:36.917 に答える
1

カスタムアダプタクラスでは、アイテムレイアウトを使用して、リスト内の各アイテムを表示していることを願っています。そのアイテムリストでは、アイテムの説明を表示するためのTextViewがあると思います。各アイテムのクリックを取得するには、以下のようにアダプタコードを変更する必要があります。

カスタムアダプタでインターフェイスを作成します。

public interface OnItemClickListener{
    void onClick(View v,String description);
}

カスタムアダプタでフィールドを作成します。

private OnItemClickListener listener;

アダプタコンストラクタから、リスナーを初期化します。

public ItemListBaseAdapter(....,OnItemClickListener listener){
    ...your code.
    this.listener=listener;
}

アダプタのgetView(...)で以下のようにコードを変更/追加します

TextView tv=convertView.findViewById(yourID);
tv.setOnClickListener(new TextView.OnClickListener() {

        @Override
        public void onClick(View v) {
            if(listener!=null){
                listener.onClick(v, ((TextView)v).getText().toString());
            }
        }
    });

次に、アクティビティクラスで、

新しいフィールドを作成します:

private OnItemClickListener myItemClickListener=new OnItemClickListener() {

    @Override
    public void onClick(View v, String description) {
        // Do what you like when individual item gets clicked.

    }
};

アダプタインスタンスを次のように作成します。

new ItemListBaseAdapter(this, image_details, myItemClickListener);

これで、listitemのtextviewをクリックすると、myItemClickListenerのonClickが呼び出され、必要に応じて処理できるようになります。

TextViewではなくlistitem全体のクリックイベントが必要な場合は、AdapterのgetView(..)メソッドでTextViewの代わりにconvertViewのonClickを設定します。

于 2012-08-27T12:31:37.020 に答える
0

listViewはlistView全体であり、各アイテムを異なるエンティティとして扱うことはできません。

あなたができることは、あなたがパラメータとして持っているあなたの関数で、Viewそして、positionそれらを使って、それらを区別するためのスイッチケースを行うかもしれません

于 2012-08-27T12:14:19.273 に答える