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

Mer*_*rve 3 customization android adapter 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);
Run Code Online (Sandbox Code Playgroud)

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

}
Run Code Online (Sandbox Code Playgroud)

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

konulist.remove(konulist.get(position));;
kimdenlist.remove(kimdenlist.get(position));
Run Code Online (Sandbox Code Playgroud)

van*_*dzi 11

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

public void remove(int position){
    konulist.remove(konulist.get(position));;
    kimdenlist.remove(kimdenlist.get(position));
}
Run Code Online (Sandbox Code Playgroud)

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

  • 它没有改变这种情况 (2认同)