2013-01-04 4 views
0

listview에서 단일 행의 색을 변경하고 싶습니다.컨텍스트 메뉴를 사용하여 ListView 행의 배경색을 동적으로 변경하십시오.

나는 사용자 정의 어댑터를 만들었습니다, 나는 행의 상황에 맞는 메뉴에서 변경 드 색상 원하는 :

@Override 
public boolean onContextItemSelected(MenuItem item) { 
    switch(item.getItemId()) { 

     case NOTE_BACKGROUND: 
      AdapterContextMenuInfo infos = (AdapterContextMenuInfo) item.getMenuInfo(); 


    getListView().getAdapter().getView(infos.position,   null,null).setBackgroundColor(Color.GREEN); 
      notes.notifyDataSetChanged(); 
      return true; 
    } 
    return super.onContextItemSelected(item); 
} 

을하지만 .. 어떤 아이디어가 ... 작동하지 않고 그 이유를 모른다 ? 고마워.

답변

1

직접 어댑터에 getView()으로 전화하지 말고 ListView으로 전화하십시오. 또한 한보기에서 색상을 설정 한 다음 목록을 스크롤하면 동일한 색상의보기가 다른 항목에 대해 다시 사용됩니다 (ListView으로 다시 사용).

Map<Integer,Color>을 사용하여 어댑터의 항목 색인 및 색상을 저장하십시오.

어댑터의 getView()을 무시하고이지도에서 반환 된보기의 색상을 설정하십시오.

컨텍스트 메뉴에서 색인에 색을 넣고지도에 색을 넣은 다음 어댑터에서 notifyDataSetChanged()을 호출하십시오.

0

notifyDataSetChanged을 수행하면 모든보기가 다시 그려지고 어댑터는 행에 대한 새보기를 반환합니다. 해당 사용자 지정 어댑터의 경우 배경색을 변경하려는 행 인덱스를 저장하는 어댑터가있는 필드가 있어야하며 이에 따라 올바른 뷰가 반환됩니다.

관련 문제