带有自定义布局按钮的警报对话框
Alertdialog with custom layout button
我有一个布局 alertdialog.And 有一个按钮可以调用时间选择器。
但是不知道按钮的setonClickListener怎么写。
它总是崩溃。
致命异常:main
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.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();
}
});
}
在调用 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();
}
});
}
你说按钮在对话框里面。但是你试图在 activity 中找到它。我的意思是,在您尝试显示您的对话框之前,它根本没有按钮,您尝试从 activity 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();
我有一个布局 alertdialog.And 有一个按钮可以调用时间选择器。 但是不知道按钮的setonClickListener怎么写。 它总是崩溃。
致命异常:main
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.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();
}
});
}
在调用 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();
}
});
}
你说按钮在对话框里面。但是你试图在 activity 中找到它。我的意思是,在您尝试显示您的对话框之前,它根本没有按钮,您尝试从 activity 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();