2011-10-04 6 views
1

ListActivity를 사용하는 Android 앱이 있습니다. 목록의 항목을 클릭하면 사용자에게 확인 대화 상자를 표시 한 다음 클릭 된 항목에 대해 몇 가지 작업을 수행하고 싶습니다.Android : ListView의 onItemClick 이벤트에서 AlertDialog 사용

그러나 대화 상자의 onClick 처리기에서 사용자가 클릭 한 항목을 알 수 없으므로 목록의 onClick 이벤트에서 position 변수에 액세스 할 수 없습니다. 여기

내가 달성하기 위해 노력하고있어의 예 : 나는 활동에 멤버 변수에 저장하여의 정보를 전달할 수 있다고 가정

getListView().setOnItemClickListener(new OnItemClickListener() { 

    @Override 
    public void onItemClick(AdapterView<?> parent, View view, 
      int position, long id) { 

     DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       switch (which){ 
       case DialogInterface.BUTTON_POSITIVE: 
        // This doesn't work, can't access position from here 
        Object o = MyListActivity.this.getListView().getItemAtPosition(position); 
        testFunction(o); 
        break; 
       } 
      } 
     }; 

     AlertDialog.Builder builder = new AlertDialog.Builder(MyListActivity.this); 
     builder.setMessage("Are you sure you want to do this?").setPositiveButton("Yes", dialogClickListener) 
      .setNegativeButton("No", dialogClickListener).show(); 

    } 
}); 

을하지만,이해야처럼 보인다 더 나은 해결책! 누구든지이 일을하는 올바른/합리적인 방법으로 나를 채울 수 있습니까?

감사합니다, 앤디

답변

2

는이 아닌지을 할 수있는 "올바른"방법이 있지만이 작업을 수행 할 수 있는지 확실하지 : 핸들러 사용 'InternalPosition'

에서

@Override 
public void onItemClick(AdapterView<?> parent, View view, 
     int position, long id) { 
    final int InternalPosition = position; 

그리고 다음을

Object o = MyListActivity.this.getListView().getItemAtPosition(InternalPosition); 

이 방법이 효과가 있을지 잘 모르겠지만 리스너의 '최종'변수에 액세스 할 수 있는지 확인합니다.

+0

소리가 괜찮은 방법처럼, 감사합니다! –

관련 문제