set button onclick event for every row of listview

*爱你&永不变心* 提交于 2019-12-06 15:09:37
Raghunandan

Use a CustomAdapter.

You need to understand how listview works

How ListView's recycling mechanism works

Pass the activity context and the list NewItems to the constructor of the custom adapter.

   @Override
   protected void onPostExecute(Void result) {
            super.onPostExecute(result);
            pDialog.dismiss();
            list=(ListView)findViewById(R.id.listupdate);
            CustomAdapter cus = new CustomAdapter(MainActivtiy.this,newItemlist); 
            list.setAdapter(cus);              

    }

Use a Custom Layout with textviews and buttons. Name it list_item.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="33dp"
        android:layout_marginTop="40dp"
        android:text="TextView" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/textView1"
        android:layout_centerHorizontal="true"
        android:text="TextView" />

    <TextView
        android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/textView2"
        android:layout_marginLeft="34dp"
        android:layout_toRightOf="@+id/textView2"
        android:text="TextView" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/textView3"
        android:layout_marginTop="20dp"
        android:text="Button" />

</RelativeLayout>

Inflate the layout, initialize and update the views. Set Listener on the button do what is required.

  public class CustomAdapter extends BaseAdapter
    {
        LayoutInflater mInlfater;
        ArrayList<HashMap<String,String>> list;
        public CustomAdapter(Context context,ArrayList<HashMap<String,String>> list) 
        {
             mInlfater = LayoutInflater.from(context);
             this.list =list;
        }
        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return list.size();
        }

        @Override
        public Object getItem(int position) {
            // TODO Auto-generated method stub
            return position;
        }

        @Override
        public long getItemId(int position) {
            // TODO Auto-generated method stub
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            // TODO Auto-generated method stub
            ViewHolder holder;
            if(convertView ==null)
            {
                convertView = mInlfater.inflate(R.layout.list_item,false);
                holder = new ViewHolder();
                holder.b1 = (Button)convertView.findViewById(R.id.button1);
                holder.tv1 = (TextView)convertView.findViewById(R.id.textView1);
                holder.tv2 = (TextView)convertView.findViewById(R.id.textView2);
                holder.tv3 = (TextView)convertView.findViewById(R.id.textView3);
                convertView.setTag(holder);

            }
            else
            {
                holder =(ViewHolder) convertView.getTag();
            }
            HashMap<String,String> map = list.get(position);
            holder.tv1.setText(map.get("name"));
                holder.tv2.setText(map.get("description"));
                holder.tv3.setText(map.get("price"));
                holder.b1.setOnClickListener(new OnClickListener()
                {

                @Override
                public void onClick(View v) {
                // TODO Auto-generated method stub

                }


               });
            return convertView;
        }
        static class ViewHolder
        {
            Button b1;
            TextView tv1,tv2,tv3;
        }
    } 

You have to set the listener inside getView of your CustomAdapter. Here is an example below

public class ListAdapter extends ArrayAdapter<Item> {
private List<Item> items;
public ListAdapter(Context context, int textViewResourceId) {
    super(context, textViewResourceId);    
}

public ListAdapter(Context context, int resource, List<Item> items) {
    super(context, resource, items);
    this.items = items;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    View v = convertView;
    if (v == null) {
        LayoutInflater vi;
        vi = LayoutInflater.from(getContext());
        v = vi.inflate(R.layout.itemlistrow, null); // your rowlayout

    }

     // suppose a button id in rawlayout is btn1
     Button btn1 = (Button) v.findViewById(R.id.btn);
     btn.setOnClicListener(listener);

    return v;

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