其他分享
首页 > 其他分享> > android – 使用自定义适配器从ListView中删除项目

android – 使用自定义适配器从ListView中删除项目

作者:互联网

我有一个自定义ListView和适配器.我可以从我的列表中删除我自定义列表中设置的项目,但我可以从ListView中删除.当我尝试调用adapter.remove(position)时,编辑器会说“创建方法”remove(int position)“”.我不知道在将此方法创建到适配器时应该怎么做.代码:

填写我的列表视图:

lv = (ListView) findViewById(R.id.list);
        LayoutInflater mLInflater = getLayoutInflater();
        final ListViewAdapter adapter = new ListViewAdapter(
                getApplicationContext(), kimdenlist, konulist,
                mLInflater);
        lv.setAdapter(adapter);

ListViewAdapter:

public class ListViewAdapter extends BaseAdapter {
    static HashMap<Integer, Boolean> cartItems = new HashMap<Integer, Boolean>();
    Context mContext;
    ArrayList<String> kimdenlist; // to load images
    ArrayList<String> konulist; // for data
    LayoutInflater mLayoutInflater;

    public ListViewAdapter(Context context, ArrayList<String> kimdenlist, ArrayList<String> konulist,
            LayoutInflater layoutInflater) {
        mContext = context;
        this.kimdenlist = kimdenlist;
        this.konulist = konulist;
        mLayoutInflater = layoutInflater;
    }

    @Override
    public int getCount() 
    {

        return kimdenlist.size(); // images array length
    }

    @Override
    public Object getItem(int arg0) {

        return null;
    }

    @Override
    public long getItemId(int arg0) {

        return 0;
    }

    int count = 0;

    // customized Listview
    @Override
    public View getView(int position, View arg1, ViewGroup arg2) {

        View v;
        final int pos = position;
        v = mLayoutInflater.inflate(R.layout.listust, null);

        TextView kimden = (TextView) v.findViewById(R.id.textvKimden);
        kimden.setText(kimdenlist.get(position));
        TextView konu = (TextView) v.findViewById(R.id.textvKonu);
        konu.setText(konulist.get(position));
        CheckBox ch = (CheckBox) v.findViewById(R.id.chk);
        try {
            if (count != 0) {
                boolean b = cartItems.get(pos);
                if (b == false)
                    ch.setChecked(false);
                else
                    ch.setChecked(true);
            }
        } catch (NullPointerException e) {

        }


        ch.setOnCheckedChangeListener(new OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton arg0, boolean arg1) {
                cartItems.put(pos, arg1);
                count++;

            }
        });
        return v;
    }

    public static HashMap<Integer, Boolean> getcartItems() {
        return cartItems;
    }

}

当我点击“delete_Button”时:我只能从列表中删除:

konulist.remove(konulist.get(position));;
kimdenlist.remove(kimdenlist.get(position));

解决方法:

这是因为你的listViewAdapter没有删除方法!您扩展BaseAdapter并且它没有删除方法.你应该在listviewAdapter中创建remove方法,它看起来像

public void remove(int position){
    konulist.remove(konulist.get(position));;
    kimdenlist.remove(kimdenlist.get(position));
}

您必须了解列表视图和适配器的工作原理.适配器保存listview的数据.将在创建列表行时调用适配器方法getView.列表大小由适配器的getCount()返回的值计算,依此类推……

标签:android,android-listview,customization,adapter
来源: https://codeday.me/bug/20190715/1469907.html