自定义 android 对话框中 Button 的 onClickListener
onClickListener of Button in custom android dialog
我在 java 中创建一个对话框并在单击按钮时显示它,
在此对话框中我有一个按钮,如何设置此按钮的 OnClickListener?
此代码显示我的对话框:
ImageView iv = (ImageView) view.findViewById(R.id.ivTaskPlus);
iv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Dialog d = new Dialog(getActivity());
d.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
d.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
d.setContentView(R.layout.task_new_layout);
d.show();
}
});
在 task_new_layout.xml 我有这个按钮:
<Button
android:id="@+id/btnSaveTask"
android:layout_marginTop="10sp"
style="@style/btnSuccess"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/save_task"
/>
我为此按钮创建了一个 onClickListener,但它不起作用而且没有错误!
final View taskView = inflater.inflate(R.layout.task_new_layout, container, false);
Button btnSaveTask = (Button) taskView.findViewById(R.id.btnSaveTask);
btnSaveTask.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.e("MGH","clicked");
}
});
您应该使用 Dialog.findViewById();
而不是膨胀视图并再次找到您的按钮。
在您的 ImageView
点击监听器中试试这个
@Override
public void onClick(View view) {
Dialog d = new Dialog(getActivity());
d.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
d.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
d.setContentView(R.layout.task_new_layout);
Button btnSaveTask = (Button) d.findViewById(R.id.btnSaveTask);
btnSaveTask.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.e("MGH", "clicked");
}
});
d.show();
}
试试 setContentView(taskview)
ImageView iv = (ImageView) view.findViewById(R.id.ivTaskPlus);
iv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Dialog d = new Dialog(getActivity());
d.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
d.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
d.setContentView(taskView);
d.show();
}
});
final View taskView = inflater.inflate(R.layout.task_new_layout, container, false);
Button btnSaveTask = (Button) taskView.findViewById(R.id.btnSaveTask);
btnSaveTask.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.e("MGH","clicked");
}
});
您正在重新膨胀您的视图,这会创建 Button
的新实例,并且这个新实例不会在任何地方加载。 Dialog
上的 Button
是一个不同的实例,您没有附加任何 OnClickListener
。
当您在 Dialog
上按 Button
时,您的代码不会被执行。
这样做
@Override
public void onClick(View view) {
Dialog d = new Dialog(getActivity());
d.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
d.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
d.setContentView(R.layout.task_new_layout);
Button myBtn = (Button) d.findViewById(R.id.btnSaveTask);
myBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// your code
}
});
d.show();
}
我在 java 中创建一个对话框并在单击按钮时显示它, 在此对话框中我有一个按钮,如何设置此按钮的 OnClickListener? 此代码显示我的对话框:
ImageView iv = (ImageView) view.findViewById(R.id.ivTaskPlus);
iv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Dialog d = new Dialog(getActivity());
d.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
d.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
d.setContentView(R.layout.task_new_layout);
d.show();
}
});
在 task_new_layout.xml 我有这个按钮:
<Button
android:id="@+id/btnSaveTask"
android:layout_marginTop="10sp"
style="@style/btnSuccess"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/save_task"
/>
我为此按钮创建了一个 onClickListener,但它不起作用而且没有错误!
final View taskView = inflater.inflate(R.layout.task_new_layout, container, false);
Button btnSaveTask = (Button) taskView.findViewById(R.id.btnSaveTask);
btnSaveTask.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.e("MGH","clicked");
}
});
您应该使用 Dialog.findViewById();
而不是膨胀视图并再次找到您的按钮。
在您的 ImageView
点击监听器中试试这个
@Override
public void onClick(View view) {
Dialog d = new Dialog(getActivity());
d.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
d.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
d.setContentView(R.layout.task_new_layout);
Button btnSaveTask = (Button) d.findViewById(R.id.btnSaveTask);
btnSaveTask.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.e("MGH", "clicked");
}
});
d.show();
}
试试 setContentView(taskview)
ImageView iv = (ImageView) view.findViewById(R.id.ivTaskPlus);
iv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Dialog d = new Dialog(getActivity());
d.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
d.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
d.setContentView(taskView);
d.show();
}
});
final View taskView = inflater.inflate(R.layout.task_new_layout, container, false);
Button btnSaveTask = (Button) taskView.findViewById(R.id.btnSaveTask);
btnSaveTask.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.e("MGH","clicked");
}
});
您正在重新膨胀您的视图,这会创建 Button
的新实例,并且这个新实例不会在任何地方加载。 Dialog
上的 Button
是一个不同的实例,您没有附加任何 OnClickListener
。
当您在 Dialog
上按 Button
时,您的代码不会被执行。
这样做
@Override
public void onClick(View view) {
Dialog d = new Dialog(getActivity());
d.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
d.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
d.setContentView(R.layout.task_new_layout);
Button myBtn = (Button) d.findViewById(R.id.btnSaveTask);
myBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// your code
}
});
d.show();
}