0

这是我的一个非常简化的版本Activity

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到处都传递了实例。也许我做错了什么。

我将如何从我的内部访问ActivitySearch实例),onClickListener以便我可以访问它的方法和变量。

谢谢你。

4

2 回答 2

4

使用从侦听Search.this.objAdapter器访问应该可以工作。objAdapter

Search.this引用当前实例Search并允许您访问其字段和方法。

于 2012-08-28T10:46:38.563 回答
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);
于 2012-08-28T10:46:25.960 回答