Remove item from custom listview on button click

混江龙づ霸主 提交于 2019-11-30 14:59:25
Raghunandan

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

try this

b2.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            lista.remove(position);
            SunetePreferateAdaptor.notifyDataSetChanged();
        }
    });

You can done it by using your ArrayList lista. First remove the item in current position and the call adapter.notifyDataSetChanged() function.

This code worked absolutely fine for me.

public class CustomAdapter extends ArrayAdapter<String>
{
Context c1;
String s1[];
int s2[];
CustomAdapter(Context c,String s[],int s3[])
{
    super(c,R.layout.tcustom,s);
    this.c1=c;
    this.s1=s;
    this.s2=s3;
}

public View getView(int position,View v,ViewGroup parent)
{
    LayoutInflater li=(LayoutInflater) c1.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    v=li.inflate(R.layout.tcustom,null);
    TextView tv=(TextView)v.findViewById(R.id.textView);
    ImageView im=(ImageView)v.findViewById(R.id.imageview);
    tv.setText(s1[position]);
    im.setImageResource(s2[position]);

    Button bt = (Button) v.findViewById(R.id.button);
    bt.setTag(position); //important so we know which item to delete on button click

    bt.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v)
        {
            v.setVisibility(View.GONE);
            notifyDataSetChanged();


            int positionToRemove = (int)v.getTag(); //get the position of the view to delete stored in the tag
            removeItem(positionToRemove); //remove the item
        }
    });

    return v;
}

public void removeItem(int position){
    //convert array to ArrayList, delete item and convert back to array
    ArrayList<String> a = new ArrayList<>(Arrays.asList(s1));
    a.remove(position);
    String[] s = new String[a.size()];
    s=a.toArray(s);
    s1 = s;
    notifyDataSetChanged(); //refresh your listview based on new data

}
 public int getCount() {
  return s1.length;
 }
 public String getItem(int position) {
 return s1[position];
 }}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!