我很好奇如何使用自定义适配器在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 :(得分: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,即第一行
按钮2的快照单击位置1,即第二行