在Android的列表视图内设置OnClick Listenerbutton

我在我的屏幕上有一个列表视图,每个列表项目包含2个文本视图和一个button。 在button单击我想要采取列表项select索引从vector中获取一些数据。

这是我的列表自定义适配器,但我不知道如何做到这一点。

private class CustomAdapter extends ArrayAdapter<ServicesItems> { public CustomAdapter(Context context, int resource, int textViewResourceId, List<ServicesItems> objects) { super(context, resource, textViewResourceId, objects); } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; TextView item = null; TextView description = null; Button subNowBtn; ServicesItems ii = getItem(position); if (null == convertView) { convertView = mInflater.inflate( R.layout.list_of_servics_item_2, null); holder = new ViewHolder(convertView); convertView.setTag(holder); } holder = (ViewHolder) convertView.getTag(); // cat_name = holder.gettitle(); Resources resources = getResources(); ServicesItems bean1 = (ServicesItems) servicesVector .elementAt(position); String cat_name_str = bean1.getService_name().toString(); String descreption = bean1.getDescription().toString(); item = holder.getItem(); item.setText(bean1.getDescription()); description = holder.getDescription(); description.setText(bean1.getService_name()); subNowBtn=holder.getSubButton(); return convertView; } private class ViewHolder { private View mRow; private TextView description = null; private TextView item = null; private Button sub = null; public ViewHolder(View row) { mRow = row; } public TextView getDescription() { if (null == description) { description = (TextView) mRow .findViewById(R.id.category_tv); } return description; } public TextView getItem() { if (null == item) { item = (TextView) mRow.findViewById(R.id.descreption_tv); } return item; } public Button getSubButton(){ if(null==sub){ sub=(Button)findViewById(R.id.subscribe_now_btn); } return sub; } } } 

在你的适配器试试这个:

 @Override public View getView(final int position, View convertView, ViewGroup parent) { View row = convertView; YourWrapper wrapper = null; if (row == null) { row = inflater.inflate(R.layout.layout, parent, false); wrapper = new YourWrapper (row); row.setTag(wrapper); } else wrapper = (YourWrapper) row.getTag(); wrapper.getButton().setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // What you want } }); return row; } 

编辑

你的包装类:

 public class YourWrapper { private View base; private Button button; public YourWrapper(View base) { this.base = base; } public Button getButton() { if (button == null) { button = (Button) base.findViewById(R.id.your_button); } return (button`); } } 

Change sub=(Button)findViewById(R.id.subscribe_now_btn); into sub=(Button) mRow.findViewById(R.id.subscribe_now_btn);

你可以通过点击button来获取列表视图的索引,这里有两个例子:

你可以在你的监听器的onClick方法中写这些。

例1

 View parentRow = (View) v.getParent(); ListView listView = (ListView) parentRow.getParent(); final int position = listView.getPositionForView(parentRow); 

例2

创build视图时使用setTag设置位置

 mybutton.setTag(position); 

在侦听器中获取位置

 int position = (Integer) view.getTag(); 

希望这个帮助:)