2012-02-28 188 views
0

在我的自定义“警报对话框”我有一个两难的问题,我已经在xml上声明的按钮上设置onclick。自定义AlertDialog.Builder添加自定义按钮事件点击

此代码给了我已经证实,有一个实际的alertDialog在此之后被实施

close.setOnClickListener(new OnClickListener() { 

      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       alertDialog.dismiss(); 
      } 
     }); 

LayoutInflates被点击的ListView的项目后一个空指针异常。

我的问题是“你如何设置自定义xml onClickListeners自定义AlertDialog上的按钮?”

LayoutInflater inflater = (LayoutInflater) this.getSystemService(LAYOUT_INFLATER_SERVICE); 
    View layout = inflater.inflate(R.layout.custom_dialog, (ViewGroup) findViewById(R.id.layout_root)); 

    TextView text = (TextView) layout.findViewById(R.id.data1); 
    ImageView image = (ImageView) layout.findViewById(R.id.dialog_image); 
    image.setImageResource(R.drawable.temp_book); 
    Button summary, confirm, close; 
    summary = (Button)findViewById(R.id.Summary); 
    confirm = (Button)findViewById(R.id.confirmCD); 
    close = (Button)findViewById(R.id.closeCD); 
    builder = new AlertDialog.Builder(this); 
    builder.setView(layout); 

    close.setOnClickListener(new OnClickListener() { 

     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      alertDialog.dismiss(); 
     } 
    }); 

    alertDialog = builder.create(); 

    alertDialog.show(); 

日志错误

02-28 15:13:28.385: E/AndroidRuntime(6763): FATAL EXCEPTION: main 

02-28 15:13:28.385: E/AndroidRuntime(6763): java.lang.NullPointerException 

02-28 15:13:28.385: E/AndroidRuntime(6763):  at test.list.A_Test4Activity.onListItemClick(A_Test4Activity.java:532) 

02-28 15:13:28.385: E/AndroidRuntime(6763):  at android.app.ListActivity$2.onItemClick(ListActivity.java:319) 

02-28 15:13:28.385: E/AndroidRuntime(6763):  at android.widget.AdapterView.performItemClick(AdapterView.java:292) 

02-28 15:13:28.385: E/AndroidRuntime(6763):  at android.widget.AbsListView.performItemClick(AbsListView.java:1058) 

02-28 15:13:28.385: E/AndroidRuntime(6763):  at android.widget.AbsListView$PerformClick.run(AbsListView.java:2514) 

02-28 15:13:28.385: E/AndroidRuntime(6763):  at android.widget.AbsListView$PerformClick.run(AbsListView.java:2514) 

02-28 15:13:28.385: E/AndroidRuntime(6763):  at android.widget.AbsListView$1.run(AbsListView.java:3168) 

02-28 15:13:28.385: E/AndroidRuntime(6763):  at android.os.Handler.handleCallback(Handler.java:605) 

02-28 15:13:28.385: E/AndroidRuntime(6763):  at android.os.Handler.dispatchMessage(Handler.java:92) 

02-28 15:13:28.385: E/AndroidRuntime(6763):  at android.os.Looper.loop(Looper.java:137) 

02-28 15:13:28.385: E/AndroidRuntime(6763):  at android.app.ActivityThread.main(ActivityThread.java:4340) 

02-28 15:13:28.385: E/AndroidRuntime(6763):  at java.lang.reflect.Method.invokeNative(Native Method) 

02-28 15:13:28.385: E/AndroidRuntime(6763):  at java.lang.reflect.Method.invoke(Method.java:511) 

02-28 15:13:28.385: E/AndroidRuntime(6763):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 

02-28 15:13:28.385: E/AndroidRuntime(6763):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 

02-28 15:13:28.385: E/AndroidRuntime(6763):  at dalvik.system.NativeStart.main(Native Method) 
+0

您膨胀的'Dialog'自定义布局中的close按钮? – Luksprog 2012-02-28 20:32:01

+0

AlertDialog.Builder builder = null; &AlertDialog alertDialog = null; 全球宣布。 – wesdfgfgd 2012-02-28 20:32:20

+0

它膨胀在一个选定项目的列表视图点击。 – wesdfgfgd 2012-02-28 20:33:05

回答

3

没有看到任何踪迹与例外,我会说,你不看,你应该寻找Button密切。如果您将AlertDialog的布局设置为您膨胀的自定义布局或构建的代码View,那么您必须对执行findViewById(R.id.Id_of_button),您将其设置为AlertDialog内容。

编辑:

接近Buttonnull(和投掷NullPointerException调用它的方法时),因为你必须寻找在布局中Button以前膨胀并用作AlertDialog内容:

close = (Button) layout.findViewById(R.id.closeCD); 

不要忘了总结确认Buttons如果他们也在膨胀的布局。

+0

我已经这么做了。为了避免混淆,我将发布我当前使用的代码以及作为日志错误。 – wesdfgfgd 2012-02-28 20:25:07