0

可能重复:
Dismiss a custom dialog?setOnClickListener引发错误

我有一个自定义对话框,对话框的布局文件包含ID按钮submit_btn” 。

在Java代码中,我setOnClickListener到对话框的submit_btn按钮:

View view = layoutInflater.inflate(R.layout.info_dialog, null); 

AlertDialog infoDialog = new AlertDialog.Builder(MyActivity.this) 
              .setView(view)   
              .create(); 
infoDialog.show(); 

Button submitBtn = (Button) view.findViewById(R.id.submit_btn); 

submitBtn.setOnClickListener(new OnClickListener() { 

      public void onClick(View v) { 
     //ERROR: Cannot refer to a non-final variable infoDialog inside an inner class defined in a different method 

        infoDialog.dismiss(); 
     } 
}); 

然后,当我打电话infoDialog.dismiss();,Eclipse的提高其抱怨Cannot refer to a non-final variable infoDialog inside an inner class defined in a different method错误。如何根据我的代码摆脱这个问题?

+0

杜普洛:http://stackoverflow.com/questions/2825272/dismiss-一个自定义对话框 – 2012-02-27 15:55:19

+0

使它最终? – WarrenFaith 2012-02-27 16:04:38

+0

如果您反对将其作为最终答案,我对该答案进行了编辑。是否有理由不想最终标出它? – bytebender 2012-02-27 16:59:56

回答

0

你可能只是这样做......

final AlertDialog infoDialog = new AlertDialog.Builder(MyActivity.this) 
              .setView(view)   
              .create(); 

// just add final to that line. 

或者你可以增加infoDialog的范围。

public class YourActivity { 

    private AlertDialog mInfoDialog; 

    private YourMethod() { 
     View view = layoutInflater.inflate(R.layout.info_dialog, null); 

     mInfoDialog = new AlertDialog.Builder(MyActivity.this) 
              .setView(view)   
              .create(); 
     mInfoDialog.show(); 

     Button submitBtn = (Button) view.findViewById(R.id.submit_btn); 

     submitBtn.setOnClickListener(new OnClickListener() { 

      public void onClick(View v) { 
       mInfoDialog.dismiss(); 
      } 
     }); 
    } 
} 
0

使用

final AlertDialog infoDialog = new AlertDialog.Builder(MyActivity.this) 
             .setView(view)   
             .create(); 
+0

任何其他方式摆脱问题? – 2012-02-27 15:53:53

0
AlertDialog infoDialog = new AlertDialog.Builder(MyActivity.this) 
             .setView(view) 
             .setPositiveButton("ok", /*OnClickListenerGoesHere*/)  
             .create(); 

将解决您的问题,以及关闭该对话框被点击的按钮时。

+0

但事情是在我的项目中,我需要避免使用对话框默认按钮 – 2012-02-27 15:57:40

+0

我不会推荐这么做,因为这是'AlertDialog'设计的。但是正如其他人所说的,你可以简单地在声明中添加一个“final”。 – keyboardsurfer 2012-02-27 16:02:44

0

使infoDialog作为类的私有成员或提前在最后加上关键字作为 最终AlertDialog infoDialog =新AlertDialog(...)