2013-10-21 101 views
0

我很好奇如何最好地处理按钮点击,在一个ListFragment与一个自定义适配器内。如何处理按钮点击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知道哪里的位置是在其被调用的位置。

我不知道最好的方法,以及如何正确地做到这一点。

+0

为什么不使用在'onClick'一个开关壳体?? – Raghunandan

+0

无法获取被点击的项目。并且还需要点击的位置才能知道它被点击了哪个项目。 – thekevshow

+0

我可以看不到它的问题 – Raghunandan

回答

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

+0

除了提供具体的项目,最终的作品,我想出了我的问题。 我把它放在那里解决我的问题。 ol = new OnItemClickListener(position,item); 添加项目到我使用的OnItemClickListener,我的问题是,这是否阻止良好的模型视图分离?并在这里产生影响,因为最终数据库交易将在这些按钮点击上执行,下线 – thekevshow

+0

@ kev2316确实尝试了上面的工作,您在问题中没有提到的问题 – Raghunandan

+0

最初我的问题是已经如何将与点击的按钮相关联的项目传递给监听器来执行那些我已经解决的操作,因为你正在做的事情我很抱歉,但现在我对你的问题是,这是不是高效并遵循适当的模型视图分离。 – thekevshow