4

我有一个自定义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);

列表视图适配器:

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

3 回答 3

12

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

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

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

于 2012-05-10T18:46:14.090 回答
1

要从 ListView 但不在适配器类中删除项目:

lv.removeViewAt(index);
adapter.notifyDataSetChanged();

其中 "index" 指定 ListView 中包含要删除的项目的位置或索引。

要从 ListView INSIDE ADAPTER CLASS 中删除一个项目:首先,您需要为列表中的每个项目添加一个标签。在列表中的内容项中使用一些布局来分配该标签。这可以在方法 getView() 中完成。

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    row = convertView;

    if(row == null){
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        row = inflater.inflate(R.layout.item_lista_lugares_visitar, parent, false);
        holder = new ViewHolder();

        // ... DO WHAT YOU NEED HERE
        holder.linearLayoutContainer = (LinearLayout) row.findViewById(R.id.ll_container);
        // Set the position as a Tag for the view
        holder.linearLayoutContainer.setTag(position);

    } else {
        holder = (ViewHolder) row.getTag();
    }

    // ... DO WHAT YOU NEED HERE

    return row;
}

// Method for remove an item of ListView inside adapter class
// you need to pass as an argument the tag you added to the layout of your choice
public void removeView(Object position) {
      // lv and the adapter must be public-static in their Activity Class
      SomeActivity.lv.removeViewAt(Integer.parteInt(position).toString());
      SomeActivity.adapter.notifyDataSetChanged();
}
于 2015-04-13T04:38:39.447 回答
0

在你的代码之后

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

您可以调用该方法:

notifyDataSetChanged();

于 2018-11-23T01:48:55.150 回答