Alertdialog与自定义布局按钮

时间:2015-01-16 08:22:37

标签: java android onclicklistener alertdialog

我有一个alertdialog的布局。还有一个按钮来调用timepicker。 但我不知道如何编写按钮的setonClickListener。 它总是崩溃。

致命例外:主要

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
        at prototype.feedme.cat.prototype.activity.CatActivity$3.onClick(CatActivity.java:115)
        at android.view.View.performClick(View.java:4756)
        at android.view.View$PerformClick.run(View.java:19749)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5221)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

代码:

private Button time;
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.CatActivity);
    time=(Button)findViewById(R.id.time);
    time.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            TimePickerDialog tpd=new TimePickerDialog(CatActivity.this, mTimesetlistener, mHour, mMinute, true);
            tpd.show();
        }
    });
    clk_btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            AlertDialog alertDialog=new AlertDialog.Builder(CatActivity.this)
                    .setTitle("Hi")
                    .setMessage("Are you ok?")
                    .setView(R.layout.notificaton_setting)
                    .show();
        }
    });
}

2 个答案:

答案 0 :(得分:1)

你说按钮在对话框内。但你试图在活动中找到它。我的意思是,在你尝试显示对话框之前,它根本没有按钮,你试图从活动onCreate方法中找到它。

您需要做的是在对话框视图中找到您的按钮。你可以这样做:

LayoutInflater inflater = getLayoutInflater();
View dialoglayout = inflater.inflate(R.layout.notificaton_setting, null);
dialogLayout.findViewById(R.id.time).setOnClickListener(...)

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setView(dialoglayout);
builder.show();

答案 1 :(得分:0)

在调用setOnClickListener

之前初始化clk_btn
private Button time;
private Button clk_btn; //<-- ADD THIS
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.MainActivity);
time=(Button)findViewById(R.id.time);
time.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        TimePickerDialog tpd=new TimePickerDialog(CatActivity.this, mTimesetlistener, mHour, mMinute, true);
        tpd.show();
    }
});
clk_btn = (Button) findViewById(R.id.YOUR_ID) //<-- AND ADD THIS
clk_btn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        AlertDialog alertDialog=new AlertDialog.Builder(MainActivity.this)
                .setTitle("Hi")
                .setMessage("Are you ok?")
                .setView(R.layout.notificaton_setting)
                .show();
    }
});

}

相关问题