Remove item from custom listview on button click

后端 未结 4 708
我在风中等你
我在风中等你 2021-01-02 23:34

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 cl

相关标签:
4条回答
  • 2021-01-03 00:08

    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];
     }}
    
    0 讨论(0)
  • You can done it by using your ArrayList lista. First remove the item in current position and the call adapter.notifyDataSetChanged() function.

    0 讨论(0)
  • 2021-01-03 00:20

    try this

    b2.setOnClickListener(new OnClickListener() {
    
            @Override
            public void onClick(View arg0) {
                lista.remove(position);
                SunetePreferateAdaptor.notifyDataSetChanged();
            }
        });
    
    0 讨论(0)
  • 2021-01-03 00:21

    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;
        }
    }
    
    0 讨论(0)
提交回复
热议问题