Set OnClick Listener on button inside list view in android

匿名 (未验证) 提交于 2019-12-03 02:56:01

问题:

I have a list view in my screen, every list item contains 2 text views and one button. On button click i want to take the list item selected index to get some data from a vector.

This is my List Custom Adapter.But i don't know how to do that.

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;         }      }  } 

回答1:

In your Adapter try this:

@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; } 

EDIT

Your wrapper class:

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);



回答2:

You can get the index of list-view on button click, here are two examples:--

You can write these in your onClick method of listener.

Example 1

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

Example 2

Set position using setTag when creating view

mybutton.setTag(position); 

Get position in the listener

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

Hope this help :)



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!