2012-08-28 2 views
0

Вот очень упрощенный вариант моей Activity:Как я могу получить доступ к переменным экземпляра моей активности изнутри onClickListener AlertDialog?

public class Search extends Activity { 

    //I need to access this. 
    public SearchResultsAdapter objAdapter; 

    public boolean onOptionsItemSelected(MenuItem itmMenuitem) { 


     if (itmMenuitem.getItemId() == R.id.group) { 

      final CharSequence[] items = {"Red", "Green", "Blue"}; 

      AlertDialog.Builder builder = new AlertDialog.Builder(this); 
      builder.setTitle(itmMenuitem.getTitle()); 

      builder.setSingleChoiceItems(lstChoices), 
       0, new DialogInterface.OnClickListener() { 

       public void onClick(DialogInterface dialog, int item) { 
        //I need to access it from here. 
       } 

       }); 

      AlertDialog alert = builder.create(); 
      alert.show(); 

      return true; 

     } 

    } 

} 

Когда кнопка меню нажата, мои приложения выскакивает AlertDialog. При создании AlertDialog и в строке onClickListener привязывается к каждому из элементов в диалоговом окне. Мне нужно получить доступ к переменной objAdapater, которая определена в моем действии Search. У меня нет доступа к экземпляру поиска в моем onClickListener, поэтому я не могу получить к нему доступ. У меня есть немного супа в моем коде с прохождением экземпляра Activity повсюду. Может быть, я делаю что-то неправильно.

Как получить доступ к экземпляру Activity (Search) из моего onClickListener, чтобы я мог получить доступ к его методам и переменным.

спасибо.

ответ

4

Использование Search.this.objAdapter для доступ objAdapter от слушателя должен работать.

Search.this относится к текущему экземпляру Search и позволяет получить доступ к его полям и методам.

1

Сделайте свою деятельность осуществлять OnClickListener:

public class Search extends Activity implements DialogInterface.OnClickListener { ... 

Добавьте метод OnClick к вашей деятельности:

public void onClick(DialogInterface dialog, int item) { 
    //I need to access it from here. 
} 

Затем передать вашу деятельность в качестве слушателя:

AlertDialog.Builder builder = new AlertDialog.Builder(this); 
builder.setTitle(itmMenuitem.getTitle()); 

builder.setSingleChoiceItems(lstChoices),0, this); 
Смежные вопросы