2009-07-20 5 views
2

다음은 시나리오입니다. ListActivity가 있으며 항목을 길게 누르면 컨텍스트 메뉴가 나타납니다. 상황에 맞는 메뉴의 한 항목은 "삭제"이며 확인 상자 (및 AlertDialog)가 나타납니다. 사용자가 확인 대화 상자에서 확인을 누르면 실제로 삭제할 수 있도록 원래 선택한 항목의 ID를 알아야합니다.선택한 항목의 ID를 ListView에서 Android의 AlertDialog로 전달하는 방법은 무엇입니까?

흐름은 다음과 같습니다

 

     This event:    Causes Android to call: 
----------------------------------------------------- 
Long press an item  -> onCreateContextMenu() 
Select context menu item -> onContextItemSelected() 
call showDialog()   -> onPrepareDialog() 
user clicks OK   -> onClick() 

인, onCreateContextMenu 및 onContextMenuSelected에서, 나는 ContextMenuInfo에서 선택한 항목의 ID를 얻을 수 있습니다. 그러나 onPrepareDialog에서 더 이상 해당 정보에 액세스 할 수 없습니다. OnPrepareDialog는 POSITIVE 버튼에 onClick 리스너를 설정하기 위해이 정보가 필요합니다.

나는 onContextMenuSelected 동안 선택한 항목의 ID를 내 활동 필드에 숨길 수 있다는 것을 알고 있습니다. 나는 그것을했고, 그것은 효과적이다. 그러나 그것은 또한 정말로 추악합니다. 그것이 소개하는 statefulness는 나를 불안하게 만듭니다. 활동에서 필드를 사용하는 것보다 그러한 정보를 전달하는 더 좋은 방법을 본 사람이 있습니까?

답변

0

나는 안드로이드 2.2 (API 레벨 8)에, 그들은 번들 소요 showDialog에 과부하를 추가 한 것을 알 수있다. 해당 번들에 선택한 항목의 ID를 넣으면 onPrepareDialog에 액세스 할 수있는 것 같습니다. 이것은 내가 찾고 있었던 바로 그 것이다. 안타깝게도 내 기기가 1.6 (API 레벨 4)에 머물러 있습니다.

1

응용 프로그램에서 한 번에 하나의 긴 키 누르기 만 할 수있는 사용자가 하나뿐이므로 (설명서를 올바르게 이해 한 경우) 왜 자신의 필드에 ID를 잘못 저장합니까? 그것을하는 것은 매우 합리적인 방법과 같게 들린다.

+0

동의 ... 못 생겼지 만 작동 할 것입니다. –

+0

안드로이드가 내 활동을 어떻게 부르는지에 대한 가정을하도록 강요합니다. 내 질문에 윤곽을 그리는 순서가 정확하다고 생각하지만, 약간의 차이를 놓친 것일 수 있으며 앞으로 Google의 변덕에 바뀔 수도 있습니다. 상태없는 코드를 작성하는 것은 매우 상태있는 코드를 작성하는 것보다 바람직합니다. –

0

환경 설정에 정보를 저장하는 것이 좋습니다. 더 많은 영구 정보를 저장하는 좋은 방법입니다. onCreate/onResume/onRestart의 환경 설정에서 무엇을 확인하여 응용 프로그램을 어디에서 다시 시작할 것인지 파악할 수 있습니다.

http://developer.android.com/guide/topics/data/data-storage.html

+0

약 2 초 동안 만이 정보를 저장하면됩니다 (사용자가 삭제를 누른 후 확인을 누를 때까지). 기본 설정은 장기간 저장하는 것이 좋습니다. –

관련 문제