如何处理按钮单击ListFragment

时间:2013-10-21 06:04:21

标签: android android-fragments android-ui

我很好奇如何使用自定义适配器在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知道位置距离被调用的位置。

我不确定最佳方法以及如何正确地做到这一点。

1 个答案:

答案 0 :(得分: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);

使用两个按钮捕捉示例

按钮1的快照单击位置0,即第一行

enter image description here

按钮2的快照单击位置1,即第二行

enter image description here