2011-03-01 6 views
2

두 가지 옵션이있는 대화 상자를 사용자에게 표시하는 onListItemClick을 만들려고합니다. 각 옵션은 특정 작업을 실행하는 함수를 호출해야합니다. 내가 점점 오전 오류 : onListItemClick 및 clicklisteners 문제

이 다른 방법에 정의 된 내부 클래스 내부가 아닌 최종 변수 위치를 참조 할 수 없습니다

protected void onListItemClick(ListView l, View v, int position, long id){ 
final CharSequence[] items = {"Delete", "Show"}; 

MyPOI mpoi= myAdapter.getItem(position); 

AlertDialog.Builder builder = new AlertDialog.Builder(this); 
builder.setTitle("Pick an option"); 
builder.setItems(items, new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int item) { 
      if(items[item].equals("Delete")){ 
       dbc.deletePOI(position); 
      } 
     } 
    }); 


AlertDialog alert = builder.create(); 

alert.show(); 
super.onListItemClick(l, v, position, id); 
} 

답변

0

같은 뭔가를하는 것이 좋습니다

public class A { 
     void method b(){ 
      something.setOnClickListener(new OnClickListener() { ... }); // this is the inner class 
     } 
} 

같은 것을해야한다. 다른 사람이 같은 문제가있는 경우를 대비하여 내 해결책은 다음과 같습니다.

 MyPOI mpoi; 
protected void onListItemClick(ListView l, View v, int position, long id){ 
final CharSequence[] items = {"Delete", "Show"}; 

    mpoi= myAdapter.getItem(position); 

AlertDialog.Builder builder = new AlertDialog.Builder(this); 
builder.setTitle("Select an option"); 
builder.setItems(items, new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int item) { 
      if(items[item].equals("Delete")){ 
      executeDelete(); 
      } 
     } 
    }); 


AlertDialog alert = builder.create(); 

alert.show(); 
super.onListItemClick(l, v, position, id); 
} 
public void executeDelete(){ 
    try{ 
int i=dbc.deletePOI(mpoi.poiId); 
if(i==-2){   
    Toast.makeText(this, "Error in operation. Please try again", Toast.LENGTH_SHORT).show();  
} 
else if(i==1){ 

    Toast.makeText(this, "Record deleted succesfully.", Toast.LENGTH_LONG).show(); 


} 

finish(); 
    }catch(Exception ex){   
     ex.printStackTrace(); 
    } 

} 
2

position 최종 만드는 시도 :

protected void onListItemClick(ListView l, View v, final int position, long id) {

을 컴파일러가 다른 변수에 대해서도 마찬가지로 불평합니다.

경우 대신에있어서 내의 클래스를 정의
1

다른 방법 정의 내부 클래스 내부 비 최종 변수 위치를 참조 할 수 없습니다

, 그것을 정의 (선언) 부모 클래스 수준에서 문제를 해결해야합니다. (무료 팁 앞부분 :) 일반적으로 내부 클래스를 사용하지 않는 편이 좋습니다. 코드가 없기 때문에 코드를 쉽게 재사용 할 수 있기 때문입니다.

어쨌든, 다시 문제, 당신은 당신이 그것을 자신을 해결하기 위해 실제로 관리

class A { 
     void method b(){ 
      something.setOnClickListener(new BetterInnerClass()); // this is the inner class 
     } 

     private class BetterInnerClass implements OnClickListener{ 
      ... 
     } 
} 
관련 문제