如何在Android中使用Dialog OnClickListener?

时间:2011-06-03 02:55:56

标签: android android-layout android-lifecycle

我是Android开发的新手。请原谅我如果我的问题很简单。

我尝试使用XML在Android Layout视图上创建一个按钮。现在在Activity类中,我试图获取按钮并在其上添加一个on click listner。这没有任何问题,工作正常。

在按钮上的类似行上单击我之前解释过我弹出一个对话框。在这个对话框中,我有一个ImageButton。单击此图像按钮,我尝试使用以下代码设置单击列表器。

 The Activity on create is as below

@覆盖

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    final Button button = (Button) findViewById(R.id.btnAdd);        
    button.setOnClickListener(this);

}

 @Override
public void onClick(View v) {
final Button btnAdd = (Button) findViewById(R.id.btnAdd);
         if(v==btnAdd) {
            dialog = new Dialog(this);
            dialog.setContentView(R.layout.add_dialog);
            dialog.setTitle("Test Title.");
            dialog.setCancelable(true);

            dialog.show();

        final ImageButton button = (ImageButton) findViewById(R.id.imageButton1);
        try {
            Log.i("Log","1");
            button.setOnClickListener(this);
            Log.i("Log","2");

        }
        catch(Exception e)
        {
            Log.i("Log","3");
            dialog.dismiss();
            //Dialog d = new Dialog(this);
            //d.setTitle("test.");
            Toast.makeText(this,e.getMessage(),Toast.LENGTH_LONG).show();
            Toast.makeText(this,e.getLocalizedMessage(),Toast.LENGTH_LONG).show();
            Toast.makeText(this,e.toString(),Toast.LENGTH_LONG).show();
            Log.i("Log","4");
            //d.show();
            Log.i("Log","5");

        }
     }

}

在上面我按照这个顺序登录。 1,3,4,5。我没有得到2.在toast中我收到空白消息,空白后跟java.lang.Nullexception。

但是这个执行时会给我一个强制关闭弹出的力量。请告知如何做到这一点。或者有相同的解决方法吗?我需要一个对话框来点击按钮,然后在对话框中我需要有多个按钮选项。对于对话框中的每个按钮,我需要执行不同的活动。任何形式的帮助或建议都是值得的。提前感谢您的时间和帮助。

1 个答案:

答案 0 :(得分:3)

您很可能正在尝试从Activity课程中检索该按钮。它返回null,因为此方法仅检索附加到Activity的资源(通过使用方法setContentView)。

您有两种选择:

  • 您可以使用LayoutInflater
  • 来扩充对话框布局
  • 如果要扩展Dialog类,请在该类中添加侦听器。

更新后修改:

正如我上面所说,问题是:

   final ImageButton button = (ImageButton) findViewById(R.id.imageButton1);

因为imageButton1不是活动中布局的一部分。只需将其替换为:

   final ImageButton button = (ImageButton) dialog.findViewById(R.id.imageButton1);