Java 如何从对话框(Android)访问GridView实例?

Java 如何从对话框(Android)访问GridView实例?,java,android,gridview,dialog,Java,Android,Gridview,Dialog,我的Android应用程序有问题。这可能是一个简单的Java问题,但我对Java的了解还不足以让我知道谷歌应该做什么。下面是一个简单的版本,说明了我的问题。我希望能够从对话框中访问gridview。很明显我这里的东西不对。我尝试将声明移到onCreate方法之外,但是我的应用程序在一开始就崩溃了(没有错误消息)。我还尝试将其作为参数添加到ShowDialog,但我猜是因为我重写了不起作用的函数。正如你可能知道的,我不知道我在做什么。想法 public class HelloGridView ex

我的Android应用程序有问题。这可能是一个简单的Java问题,但我对Java的了解还不足以让我知道谷歌应该做什么。下面是一个简单的版本,说明了我的问题。我希望能够从对话框中访问
gridview
。很明显我这里的东西不对。我尝试将声明移到onCreate方法之外,但是我的应用程序在一开始就崩溃了(没有错误消息)。我还尝试将其作为参数添加到
ShowDialog
,但我猜是因为我重写了不起作用的函数。正如你可能知道的,我不知道我在做什么。想法

public class HelloGridView extends Activity {
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        final GridView gridview = (GridView) findViewById(R.id.gridview);
        gridview.setAdapter(new ImageAdapter(this));
        ((ImageAdapter) gridview.getAdapter()).initializemThumbIds();

        gridview.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
                showDialog(0);
            }
        });
    }

    protected Dialog onCreateDialog(int id) {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setMessage("?")
               .setCancelable(false)
               .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                   public void onClick(DialogInterface dialog, int id) {
                       gridview.setAdapter(new ImageAdapter(this));  // gridview cannot be resolved
                       dialog.cancel();
                   }
               })
               .setNegativeButton("No", new DialogInterface.OnClickListener() {
                   public void onClick(DialogInterface dialog, int id) {
                       HelloGridView.this.finish();
                   }
               });
        AlertDialog diag = builder.create();
        return diag;
    }
}
公共类HelloGridView扩展活动{
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final GridView GridView=(GridView)findviewbyd(R.id.GridView);
setAdapter(新的ImageAdapter(this));
((ImageAdapter)gridview.getAdapter()).initializemThumbIds();
setOnItemClickListener(新的OnItemClickListener(){
public void onItemClick(AdapterView父视图、视图v、整型位置、长id){
显示对话框(0);
}
});
}
受保护的对话框onCreateDialog(int id){
AlertDialog.Builder=新建AlertDialog.Builder(此);
builder.setMessage(“?”)
.setCancelable(错误)
.setPositiveButton(“是”,新的DialogInterface.OnClickListener(){
public void onClick(DialogInterface对话框,int-id){
gridview.setAdapter(新的ImageAdapter(this));//无法解析gridview
dialog.cancel();
}
})
.setNegativeButton(“否”,新的DialogInterface.OnClickListener(){
public void onClick(DialogInterface对话框,int-id){
HelloGridView.this.finish();
}
});
AlertDialog diag=builder.create();
返回诊断;
}
}

我认为您没有正确的作用域,因此下面我将gridView作为一个成员变量。但我认为您真正想要做的是将ImageAdapter设置为成员变量,并仅在对话框中单击“是”更新ImageAdapter

公共类HelloGridView扩展活动{
私有GridView GridView;
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
gridview=(gridview)findViewById(R.id.gridview);
setAdapter(新的ImageAdapter(this));
((ImageAdapter)gridview.getAdapter()).initializemThumbIds();
setOnItemClickListener(新的OnItemClickListener(){
public void onItemClick(AdapterView父视图、视图v、整型位置、长id){
显示对话框(0);
}
});
}
受保护的对话框onCreateDialog(int id){
AlertDialog.Builder=新建AlertDialog.Builder(此);
builder.setMessage(“?”)
.setCancelable(错误)
.setPositiveButton(“是”,新的DialogInterface.OnClickListener(){
public void onClick(DialogInterface对话框,int-id){
gridview.setAdapter(新的ImageAdapter(this));//无法解析gridview
dialog.cancel();
}
})
.setNegativeButton(“否”,新的DialogInterface.OnClickListener(){
public void onClick(DialogInterface对话框,int-id){
HelloGridView.this.finish();
}
});
AlertDialog diag=builder.create();
返回诊断;
}
}

谢谢!你说得对,我确实想让ImageAdapter成为一个成员变量。
public class HelloGridView extends Activity {
private GridView gridview;
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    gridview = (GridView) findViewById(R.id.gridview);
    gridview.setAdapter(new ImageAdapter(this));
    ((ImageAdapter) gridview.getAdapter()).initializemThumbIds();

    gridview.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
            showDialog(0);
        }
    });
}

protected Dialog onCreateDialog(int id) {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setMessage("?")
           .setCancelable(false)
           .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
               public void onClick(DialogInterface dialog, int id) {
                   gridview.setAdapter(new ImageAdapter(this));  // gridview cannot be resolved
                   dialog.cancel();
               }
           })
           .setNegativeButton("No", new DialogInterface.OnClickListener() {
               public void onClick(DialogInterface dialog, int id) {
                   HelloGridView.this.finish();
               }
           });
    AlertDialog diag = builder.create();
    return diag;
}
}