Nico
Nico

Reputation: 6359

Delete button on ListView items (like for iPhone)

I have a ListView (with an Adapter of my own) where I'd like to add a delete button by swaping an item on the ListView (like on iPhones).

I really don't know how to do it and where to start ...

Could you please give me some hints ?

Thanks

Upvotes: 0

Views: 3088

Answers (1)

pouzzler
pouzzler

Reputation: 1834

What you want to implement is a custom ListView. You need a layout for your row, here's an example

res/layout/row.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@android:color/transparent">

    <TextView android:id="@+id/Browse_DateTime"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@android:color/transparent" />


    <ImageButton android:id="@+id/delete"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent" />

</LinearLayout>

Then you need to overide the getView() method of your adapter, a little like this:

setListAdapter(new ArrayAdapter<Object>(this, R.layout.row, R.id.Browse_DateTime, ourRows) {
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View v = convertView;
            if (v == null) {
                LayoutInflater vi = (LayoutInflater)BrowseActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                v = vi.inflate(R.layout.row, null);  
            }    
            TextView time = (TextView) v.findViewById (R.id.Browse_DateTime);
            time.setText(ourRows[position].dateTime);
            ImageButton delete = (ImageButton) v.findViewById(R.id.delete);
            delete.setFocusable(false);
            delete.setImageDrawable(BrowseActivity.this.getResources().getDrawable(R.drawable.deletebutton));  
            delete.setOnClickListener(BrowseActivity.this);
            delete.setId(position);
            return v;
        }
    };)

Best regards.

PS: this is cut&paste from my code, BrowseActivity is just the name of the activity this code resides in, R.layout.row is my row.xml file, you name it any which way, just put it in /res/layout/, and if your delete button is an imagebutton, you DO need the delete.setFocusable(false); (try it without and see why).

Upvotes: 3

Related Questions