2013-06-13 3 views
0

Gmail과 같은 선택 동작을 구현하려고합니다. 항목을 클릭하면 해당 항목이 선택되거나 선택 취소되고 선택한 항목 위에 맞춤 색상이 그려집니다. 나는 this을 참조로 사용하고 있습니다.어댑터를 통해 listview에서 행의 배경색을 변경합니다.

일부 이유로 항목을 선택/선택 취소 한 후에 만 ​​작동합니다. 그 후에 getView()가 호출되고 모든 것이 예상대로 작동합니다. 처음부터 getView()가 호출되지 않는 이유는 무엇입니까?

ListActivity :

@Override 
public void onListItemClick(ListView parent, View view, int position, long id) { 
    super.onListItemClick(parent, view, position, id); 
    mSimpleCursorAdapter.toggleSelected(new Integer(position)); 
} 

어댑터 :

public ArrayList<Integer> selectedIds = new ArrayList<Integer>(); 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    mCursor = (Cursor) getItem(position); 
    ViewHolder holder = null; 
    int col = -1; 

    if(convertView == null) 
    { 
     holder = new ViewHolder(); 
     convertView = mInflater.inflate(R.layout.row, parent, false); 

     holder.mTitle = (TextView) convertView.findViewById(R.id.titleID); 
     convertView.setTag(holder); 

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

    col = mCursor.getColumnIndex(ReminderColumns.TITLE); 
    holder.mTitle.setText(mCursor.getString(col)); 

    if (selectedIds.contains(position)) { 
     convertView.setSelected(true); 
     convertView.setPressed(true); 
     convertView.setBackgroundColor(mContext.getResources().getColor(R.color.orange)); 
    } 
    else 
    { 
     convertView.setSelected(false); 
     convertView.setPressed(false); 
     convertView.setBackgroundColor(mContext.getResources().getColor(R.color.white)); 
    } 
return convertView; 
} 

public void toggleSelected(Integer position) 
{ 
    if(selectedIds.contains(position)) 
    { 
     selectedIds.remove(position); 
    } 
    else 
    { 
     selectedIds.add(position); 
    } 
} 

답변

1

당신이 notifyDataSetChanged()을 추가하는 시도 했습니까?

아마도 도움이 될 이런 식으로 추가 :

@Override 
public void onListItemClick(ListView parent, View view, int position, long id) { 
    super.onListItemClick(parent, view, position, id); 
    mSimpleCursorAdapter.toggleSelected(new Integer(position)); 
    mSimpleCursorAdapter.notifyDataSetChanged(); 
} 
+0

덕분에,이 완벽했다. 나는 그것이 몇 번의 클릭 후 왜 업데이트 될지 이해하지 못한다. – user2246120

+0

예치. – HalR

관련 문제