I am developing an android application in which I have made one ListView. I have to add 2 buttons with each row in ListView. These 2 buttons are Add and Delete. When user selects one of the buttons then some actions should be taken. How can I do it?
You will first need to create a custom layout xml which will represent a single item in your list. You will add your two buttons to this layout along with any other items you want to display from your list.
<?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/list_item_string" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_alignParentLeft="true" android:paddingLeft="8dp" android:textSize="18sp" android:textStyle="bold" /> <Button android:id="@+id/delete_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:layout_marginRight="5dp" android:text="Delete" /> <Button android:id="@+id/add_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toLeftOf="@id/delete_btn" android:layout_centerVertical="true" android:layout_marginRight="10dp" android:text="Add" /> </RelativeLayout>
Next you will need to create a Custom ArrayAdapter Class which you will use to inflate your xml layout, as well as handle your buttons and on click events.
public class MyCustomAdapter extends BaseAdapter implements ListAdapter { private ArrayList<String> list = new ArrayList<String>(); private Context context; public MyCustomAdapter(ArrayList<String> list, Context context) { this.list = list; this.context = context; } @Override public int getCount() { return list.size(); } @Override public Object getItem(int pos) { return list.get(pos); } @Override public long getItemId(int pos) { return list.get(pos).getId(); //just return 0 if your list items do not have an Id variable. } @Override public View getView(final int position, View convertView, ViewGroup parent) { View view = convertView; if (view == null) { LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); view = inflater.inflate(R.layout.my_custom_list_layout, null); } //Handle TextView and display string from your list TextView listItemText = (TextView)view.findViewById(R.id.list_item_string); listItemText.setText(list.get(position)); //Handle buttons and add onClickListeners Button deleteBtn = (Button)view.findViewById(R.id.delete_btn); Button addBtn = (Button)view.findViewById(R.id.add_btn); deleteBtn.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v) { //do something list.remove(position); //or some other task notifyDataSetChanged(); } }); addBtn.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v) { //do something notifyDataSetChanged(); } }); return view; } }
Finally, in your activity you can instantiate your custom ArrayAdapter class and set it to your listview.
public class MyActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_my_activity); //generate list ArrayList<String> list = new ArrayList<String>(); list.add("item1"); list.add("item2"); //instantiate custom adapter MyCustomAdapter adapter = new MyCustomAdapter(list, this); //handle listview and assign adapter ListView lView = (ListView)findViewById(R.id.my_listview); lView.setAdapter(adapter); }
Hope this helps!
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With