2009-11-11 1 views
4

ContextMenu를 사용하려고합니다.
SimpleCursorAdapter를 사용하여 간단한 ListActivity에 대해이 작업을 성공적으로 수행했습니다. I에 이동
는 CursorAdapter와 SimpleCursorAdapter를 대체 여전히의 ContextMenu 동작을 유지하려면, 그래서 두 개의 필수 재정의 기능을 추가 한의 Bindview와 newViewonCreateContextMenu가 ContextMenuInfo에 대한 null 값으로 호출됩니다.

public View newView(Context context, Cursor cursor, ViewGroup parent) { 
    View view = mLayoutInflater.inflate(R.layout.check_row, parent, false); 
    registerForContextMenu(view); 
    return view; 
} 

참고 registerForContextMenu 대체 registerForContextMenu (위에서 getListView을()) ListActivity의 onCreate 메소드에서. onCreateContextMenu (...)에 대한 호출을 얻기 위해 필요한 것을 찾았습니다.

이 모든 것이 작동합니다 (예상 위젯으로 작성된 행, 작업 콜백 등). onCreateContextMenu (...)에 제공된 ContextMenuInfo 매개 변수가 이제 null 인 경우를 제외하고는 모든 것이 rowId에 액세스하는 것을 막습니다.
수행 할 또 다른 트릭이 있습니까? 아마도 CursorAdapter의 bindView (...) 메소드에서?

답변

2

나는 'commonsware.com'이 단서와 방향을 제공했다는 것을 지적 할 것이다.
문제가
- 행 레이아웃에서 CheckBox를 사용하면 컨텍스트 메뉴를 사용할 때 영향을받습니다.
- CheckedTextView는 다중 선택을위한 것으로, 선택 상태 초기화에 적합하지 않습니다.

나는 다음과 같은
1. CheckedTextView
2.의 Bindview (...)
주 동안 확인 된 상태를 초기화하는 CursorAdapter에서 확장 않습니다 채택 된 솔루션 :이 너무
올바른 아이콘을 표시 관리해야 3. onListItemClick (...)에서 CheckedTextView의 상태를 관리하고 커서를 업데이트하는 것을 잊지 않고 dBase에 기록합니다.

1

그건 올바른 접근 방식이 아닙니다. 행이 아닌 ListView에 대한 컨텍스트 메뉴를 등록하십시오. 레이아웃을 부 풀린 후 registerForContextMenu()을 앞에, 아마도 onCreate()으로 부르십시오.

+1

onCreate()에 registerForContextMenu()를 넣고 싶지만 그렇게하면 긴 클릭에 응답하지 않는 목록 항목이 생기므로 onCreateContextMenu()에 대한 호출이 없으므로 컨텍스트 메뉴가 없습니다. 레지스터 newView()를 호출하면 onCreateContextMenu()에 대한 콜백이 발생하지만 ContextMenuInfo 매개 변수는 null입니다. 그러나 newView()와 onCreate()에서 레지스터를 사용하는 것은 onCreateContextMenu()가 ContextMenuInfo에서 유효한 항목과 함께 호출 될 때까지 작동합니다. 나는 이것이 '맞다'라고 생각하지 않는다. 더 좋은 방법이 있어야만 하는가? –

+0

"onCreate()에 registerForContextMenu()를 넣고 싶지만 그렇게하면 긴 클릭에 응답하지 않는 목록 항목이 생기므로 onCreateContextMenu()에 대한 호출이 없으므로 컨텍스트 메뉴가 없습니다." ListView 및 registerForContextMenu() 샘플은 http://github.com/commonsguy/cw-android/tree/master/Database/Constants/에서 확인하십시오. 고마워요. – CommonsWare

+0

. 이 샘플을 가져 와서 내 문제보다는 내 자신의 코드에서 다시 만들려고했습니다. CheckBox와 ContextMenus를 더 이상 사용할 수 없도록 row.xml을 수정하십시오. CheckBox를 처리하는 데 로직이 필요하지 않습니다. 행 끝에 다음을 추가하십시오.XML 는 <선택란 로이드 : layout_below = "@ 아이디/값" 로이드 : layout_width = "wrap_content는" 로이드 : layout_height = "wrap_content" 로이드 : layout_toLeftOf = "이드 = 로이드"@ + ID/확인 " @ + id/value " /> –

관련 문제