0

ArrayAdapter クラスに問題があります。問題は、冷蔵庫アイテムリストでアイテムが削除されているのに、UI に反映されていないことです。ビューでは、アクティビティで削除されたアイテムに関係なく、最後のアイテムのみが削除されます。

Activity.java(重要部分):

m_adapter.remove(m_adapter.getItem(id));
m_adapter.notifyDataSetChanged();

RefrigeratorItemAdapter.java:

public class RefrigeratorItemAdapter extends ArrayAdapter<RefrigeratorItem> {
private List<RefrigeratorItem> refrigeratorItemList;

public RefrigeratorItemAdapter(Context context, int textViewResourceId,
        List<RefrigeratorItem> list) {
    super(context, textViewResourceId, list);
    this.refrigeratorItemList = list;

}

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

    if (v == null) {
        LayoutInflater vi = (LayoutInflater) getContext().getSystemService(
                Context.LAYOUT_INFLATER_SERVICE);
        v = vi.inflate(R.layout.simple_list_item_1, null);

        RefrigeratorItem i = (RefrigeratorItem) getItem(position);

        System.out.println(i.toString());
        if (i != null) {
            TextView tt = (TextView) v.findViewById(R.id.text1);
            tt.setText(i.getProductname());
        }
    }
    return v;

}

public void remove(RefrigeratorItem object) {
    super.remove(object);
    this.refrigeratorItemList.remove(object);
    System.out.println(Arrays.toString(refrigeratorItemList.toArray()));
}

 }

ありがとうございました!

4

1 に答える 1

1

ビューを間違った方法で再利用しています。次のようにしてみてください。

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

    if (v == null) {
        LayoutInflater vi = (LayoutInflater) getContext().getSystemService(
                Context.LAYOUT_INFLATER_SERVICE);
        v = vi.inflate(R.layout.simple_list_item_1, null);
    }

    RefrigeratorItem i = (RefrigeratorItem) getItem(position);

    System.out.println(i.toString());
    if (i != null) {
        TextView tt = (TextView) v.findViewById(R.id.text1);
        tt.setText(i.getProductname());
    }
    return v;
}

v が null でない場合は、ビューが既に表示されていることを意味し、新しいアイテムに再利用できるようになりました。ただし、ビューの内容を更新する必要があります。

たとえば、画面に 5 つのリスト項目がある場合:

1  
2  
3  
4  
5  

スクロールすると、次のようになります。

2  
3  
4  
5  
6  

'1' を含むビューは、'6' を表示するために使用されます。ただし、コードでは、テキストビューのコンテンツを 1 から 6 に更新しません。

于 2013-02-24T23:37:09.030 に答える