0

さまざまなビューのクリックを処理するために、getView() でビューのリスナーを設定します。たくさんのアイテムを追加すると、少し遅くなります。

    public View getView(int position, View convertView, ViewGroup parent) {
            holder.icon_iv = (ImageView) convertView.findViewById(R.id.app_icon_iv);
            holder.icon_iv.setOnClickListener(new OnClickListener() {
                public void onClick(View v) {
                    ...
                }
            });

            holder.checkbox_iv = (CheckBox) convertView.findViewById(R.id.history_checkbox_iv);
            holder.checkbox_iv.setOnClickListener(new OnClickListener() {
                public void onClick(View v) {
                    ...
                }
            });
    }

だから私はonItemClick()でそれをしたいのですが、View arg1はビューのクリックの違いを見分けることができません。誰がそれをどうするか教えてもらえますか?

public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {

}

編集:ありがとう、私はこのようにすることに決めました、そしてそれは完全に機能します:

        holder.item_ll.setTag(position);
        holder.item_ll.setOnClickListener(mItemClickListener);
        holder.checkbox_iv.setTag(position);
        holder.checkbox_iv.setOnClickListener(mItemClickListener);

public View.OnClickListener mItemClickListener = new View.OnClickListener() {
    public void onClick(View view) {
        if (view.getTag() instanceof Integer) {
            int position = (Integer) view.getTag();
            HistoryItem item = adapter.get(position);
            if (view.getId() == R.id.checkbox_iv) {
                ...
            } else if (view.getId() == R.id.item_ll) {
                ...
            }
        }
    }
};
4

4 に答える 4

4

OnClickListener1 種類のイベントを処理するために 1 つを使用する

サンプルコード

あなたの中にAdapter

public interface CustomListListener
{
    void onEventA(index int);
    void onEventB(index int);
}
public View.OnClickListener mButtonATypeClickListener = new View.OnClickListener(){
    public void onClick(View view)
    {
        int position = (Integer) view.getTag();
        mListener.onEventA(position);
    }
}
public View.OnClickListener mButtonBTypeClickListener = new View.OnClickListener(){
    public void onClick(View view)
    {
        int position = (Integer) view.getTag();
        mListener.onEventB(position);
    }
}

public View getView(int position, View convertView, ViewGroup parent) {
   ...
   buttonA.setTag(position);
   buttonA.setOnClickListener(mButtonATypeClickListener);
   buttonB.setTag(position);
   buttonB.setOnClickListener(mButtonBTypeClickListener);
   ...
}

あとは、 に実装するだけCustomListListenerですActivity

于 2013-09-03T10:55:33.217 に答える
3

getId() 関数を使用できます

 public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {

if(arg1.getId()==R.id.app_icon_iv){
             //Do something for that view
}
else{ 
             // Do something for another view
}

}
于 2013-09-03T10:42:34.480 に答える
1

リスト項目のすべての子で共通の実行がある場合は、onItemClick()listner を使用する必要があります。それ以外の場合、各子には独自のクリック リスナーがあります。もう1つ、CheckBoxまたはRadioButtonを使用する場合は、クリックリスナーではなくチェック変更リスナーを使用することをお勧めします。

于 2013-09-03T10:42:31.707 に答える