其他分享
首页 > 其他分享> > android – 在按钮单击时从自定义列表视图中删除项目

android – 在按钮单击时从自定义列表视图中删除项目

作者:互联网

我有一个自定义列表视图,有2个textviews和2个按钮(播放和删除按钮)
我想点击删除按钮删除当前行.

我的适配器类

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

那我该怎么办呢?
我已经尝试使arraylist静态并在点击时删除它的项目..但没有成功..

解决方法:

您无需将ArrayList设为静态.

您需要从列表中删除填充listview的数据.你调用notifyDataSetChanged();刷新lsitview.

您可以删除静态关键字并使用

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

替代方案

您可以将列表传递给适配器类的构造函数.

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

然后将它放在一个单独的.java文件中

class ob {
    String titlu, descriere;

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

然后

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

标签:android-adapter,android,listview
来源: https://codeday.me/bug/20191006/1858249.html