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

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

3 に答える 3

12

これは、listViewAdapterにメソッドが削除されていないためです。BaseAdapterを拡張しましたが、メソッドを削除していません。listviewAdapterでcreateremoveメソッドを作成する必要があり、次のようになります。

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 から項目を削除するが、ADAPTER クラス内では削除しない:

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 に答える