Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Remove item from custom listview on button click

I have a custom listview, that has 2 textviews and 2 buttons (play and delete button) I want when I click the delete button to delete the current line.

My adapter class

import java.util.ArrayList;

import android.content.Context;
import android.graphics.Color;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.TextView;

public class SunetePreferateAdaptor extends BaseAdapter {

    class ob {
        String titlu, descriere;

        public ob(String titlu, String descriere) {
            this.titlu = titlu;
            this.descriere = descriere;
        }
    }

    ArrayList<ob> lista;
    Context context;

    public SunetePreferateAdaptor(Context context) {
        this.context = context;
        lista = new ArrayList<ob>();

        for (int i = 1; i <= 20; i++) {
            lista.add(new ob("text", "text2"));

        }

    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return lista.size();
    }

    @Override
    public Object getItem(int arg0) {
        // TODO Auto-generated method stub
        return lista.get(arg0);
    }

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

    @Override
    public View getView(int arg0, View arg1, ViewGroup arg2) {
        // TODO Auto-generated method stub

        LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View row = inflater.inflate(R.layout.single_favsound_row, arg2, false);

        Button b2 = (Button) row.findViewById(R.id.button2);
        b2.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // here, i want to delete the current row of the listview
                //
                //
            }
        });
        TextView titlu = (TextView) row.findViewById(R.id.singleText2);
        titlu.setText(lista.get(arg0).titlu);
        titlu.setTextColor(Color.WHITE);
        titlu.setTypeface(Global.font1);
        TextView descriere = (TextView) row.findViewById(R.id.singleText1);
        descriere.setText(lista.get(arg0).descriere);
        descriere.setTextColor(Color.WHITE);
        descriere.setTypeface(Global.font1);

        return row;
    }
}

Well how can I do that? I've tried making the arraylist static and delete its items on click.. but no success..

like image 392
Boldijar Paul Avatar asked Apr 16 '14 07:04

Boldijar Paul


People also ask

How to remove item from ListView on button click in android?

You need to delete the data from the list which populates listview. You call notifyDataSetChanged(); to refresh the lsitview. Button b2 = (Button) row. findViewById(R.

How to delete item from custom ListView in android?

remove(paramInt); From. remove(paramInt); close.


2 Answers

You need not make ArrayList static.

You need to delete the data from the list which populates listview. You call notifyDataSetChanged(); to refresh the lsitview.

You can remove the static key word and use

 Button b2 = (Button) row.findViewById(R.id.button1);
        b2.setTag(arg0); 
        b2.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                int pos = (int)arg0.getTag();
                  lista.remove(pos);
                  SunetePreferateAdaptor.this.notifyDataSetChanged();            }
        });

Alternative :

You can pass the list to the constructor of adapter class.

 ListView lv = (ListView) this.findViewById(R.id.listView1);    
     ArrayList<ob> lista = new ArrayList<ob>();

        for (int i = 1; i <= 20; i++) {
            lista.add(new ob("text", "text"+i));

        }

lv.setAdapter(new SunetePreferateAdaptor(this,lista));

Then have this in a separate .java file

class ob {
    String titlu, descriere;

    public ob(String titlu, String descriere) {
        this.titlu = titlu;
        this.descriere = descriere;
    }
}

Then

public class SunetePreferateAdaptor extends BaseAdapter {


    ArrayList<ob> lista;
    Context context;

    public SunetePreferateAdaptor(Context context, ArrayList<ob> lista ) {
        this.context = context;
        this.lista= lista;

    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return lista.size();
    }

    @Override
    public Object getItem(int arg0) {
        // TODO Auto-generated method stub
        return lista.get(arg0);
    }

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

    @Override
    public View getView(int arg0, View arg1, ViewGroup arg2) {
        // TODO Auto-generated method stub

        LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View row = inflater.inflate(R.layout.fg, arg2, false);

        Button b2 = (Button) row.findViewById(R.id.button1);
        b2.setTag(arg0);
        b2.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                int pos = (int)arg0.getTag();
                  lista.remove(pos);
                  SunetePreferateAdaptor.this.notifyDataSetChanged();            }
        });
        TextView titlu = (TextView) row.findViewById(R.id.textView1);
        titlu.setText(lista.get(arg0).titlu);
        titlu.setTextColor(Color.WHITE);

        TextView descriere = (TextView) row.findViewById(R.id.textView2);
        descriere.setText(lista.get(arg0).descriere);


        return row;
    }
}
like image 129
Raghunandan Avatar answered Oct 28 '22 21:10

Raghunandan


try this

b2.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            lista.remove(position);
            SunetePreferateAdaptor.notifyDataSetChanged();
        }
    });
like image 25
Zeer0 Avatar answered Oct 28 '22 21:10

Zeer0