0

ListFragmentカスタムアダプターを使用して、ボタンのクリックをどのように処理するのが最善かを知りました。

ボタンのonClickListenerセットアップはありますが、クリックされたアイテムを取得できるようにする必要があります。これはアイテム内にあるためgetView、カスタムアダプターの内部です。

*/
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view;

        if (convertView == null) {
            view = _inflater.inflate(R.layout.test_single_item, parent, false);
        } else {
            view = convertView;
        }

        TestItemModel item = getItem(position);
        ((TextView) view.findViewById(R.id.item_label)).setText(item.getName());
        ((TextView) view.findViewById(R.id.item_id)).setText(item.getId());
        ImageView image = (ImageView) view.findViewById(R.id.image_id);
        Resources resources = this.getContext().getResources();
        image.setImageDrawable(resources.getDrawable(R.drawable.ic_launcher));
        Button btn = (Button) view.findViewById(R.id.button_id);
        Button btn2 = (Button) view.findViewById(R.id.button_id_2);
        Button btn3 = (Button) view.findViewById(R.id.button_id_3);
        ol = new OnItemClickListener(position);
        btn.setOnClickListener(ol);
        btn.setTag(1);
        btn2.setOnClickListener(ol);
        btn2.setTag(2);
        btn3.setOnClickListener(ol);
        btn3.setTag(3);

        return view;
    }

ご覧のとおり、タグを使用してクリックされたボタンを特定し、OnItemClickListener呼び出された位置からその位置を認識しています。

最善のアプローチと、これを適切に行う方法についてはわかりません。

4

1 に答える 1

2

以下のようにスイッチケースを使用してください

private OnClickListener mClickListener = new OnClickListener() {

            public void onClick(View v) {
                switch(v.getId())
                {
                case R.id.button_id :
                    // btn clicked
                            Toast.makeText(context," Button1 clicked at positon"+v.getTag(), Toast.LENGTH_SHORT).show();
                    break;
                case R.id.button_id2 :
                    // btn2 clicked   
                           Toast.makeText(context," Button2 clicked at positon"+v.getTag(), Toast.LENGTH_SHORT).show();
                    break;  
                case R.id.button_id3 :
                            Toast.makeText(context," Button3 clicked at positon"+v.getTag(), Toast.LENGTH_SHORT).show();  
                    // btn 3 clciked
                    break; 
                }

            }
        };

使用する

btn.setOnClickListener(mClickListener);
btn.setTag(position);
btn2.setOnClickListener(mClickListener);
btn2.setTag(position);
btn3.setOnClickListener(mClickListener);
btn3.setTag(position);

2 つのボタンを使用した例のスナップ

位置 0 でクリックされたボタン 1 のスナップ、つまり最初の行

ここに画像の説明を入力

位置 1 でクリックされたボタン 2 のスナップ、つまり 2 行目

ここに画像の説明を入力

于 2013-10-21T06:41:20.667 に答える