2013-02-24 3 views
0

ArrayAdapter 클래스에 문제가 있습니다. 문제는 항목이 refrigeratorItemList에서 바로 제거되지만 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())); 
} 

} 

감사합니다!

답변

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 

을이 결과, 스크롤 : 지금 표시하는 데 사용됩니다 '1'에 포함

2 
3 
4 
5 
6 

보기 '6'. 그러나 코드에서 텍스트보기의 te 내용을 1에서 6까지 업데이트하지 마십시오.

+0

도움과 설명에 진심으로 감사드립니다! – user1259201

관련 문제