Android 自定义对话框片段中的View.OnClickListener
在教程之后,我正在尝试实现一个自定义的Android 自定义对话框片段中的View.OnClickListener,android,android-view,onclicklistener,android-dialogfragment,Android,Android View,Onclicklistener,Android Dialogfragment,在教程之后,我正在尝试实现一个自定义的对话框片段。我的问题是无法处理自定义视图的button.setOnClickListener事件。最奇怪的是,我在获取按钮的.getText()时没有问题,只是找不到处理单击事件的方法。下面是我的代码: SettingsDialogFragment.java public class SettingsDialogFragment extends DialogFragment { @Override public Dialog onCreateDialog(
对话框片段
。我的问题是无法处理自定义视图的button.setOnClickListener事件。最奇怪的是,我在获取按钮的.getText()
时没有问题,只是找不到处理单击事件的方法。下面是我的代码:
SettingsDialogFragment.java
public class SettingsDialogFragment extends DialogFragment
{
@Override
public Dialog onCreateDialog(Bundle savedInstanceState)
{
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
// Get the layout inflater
LayoutInflater inflater = getActivity().getLayoutInflater();
final View view = inflater.inflate(R.layout.dialog_settings, null);
final Button colorButton =(Button) view.findViewById(R.id.colorButton_dialogSettings);
String s = colorButton.getText().toString();
System.out.println("its working "+s);
//NOT working
colorButton.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
System.out.println("OnClick");
}
});
// Inflate and set the layout for the dialog
// Pass null as the parent view because its going in the dialog layout
builder.setView(inflater.inflate(R.layout.dialog_settings, null))
// Add action buttons
.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id)
{
}
})
.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
SettingsDialogFragment.this.getDialog().cancel();
}
});
return builder.create();
}
`
我的自定义视图代码(dialog_settings.xml)
新答案 将您的
onCreateDialog
更改为:
import android.view.View.OnClickListener;
public class SettingsDialogFragment extends DialogFragment implements onClickListener
{
@Override
public Dialog onCreateDialog(Bundle savedInstanceState)
{
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
// Get the layout inflater
LayoutInflater inflater = getActivity().getLayoutInflater();
final View view = inflater.inflate(R.layout.dialog_settings, null);
final Button colorButton =(Button) view.findViewById(R.id.colorButton_dialogSettings);
String s = colorButton.getText().toString();
System.out.println("its working "+s);
colorButton.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
switch (v.getId()) {
case R.id.colorButton_dialogSettings
System.out.println("OnClick");
break;
default:
break;
}
});
// Inflate and set the layout for the dialog
// Pass null as the parent view because its going in the dialog layout
builder.setView(inflater.inflate(R.layout.dialog_settings, null))
// Add action buttons
.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id)
{
}
})
.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
SettingsDialogFragment.this.getDialog().cancel();
}
});
return builder.create();
}
在您的活动中:
private Button colorButton=(按钮)findviewbyd(R.id.colorButton\u对话框设置)代码>
**旧答案要求你自己写*
尝试在onCreateDialog中删除按钮代码并添加以下内容:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_dialog, container, false);
Button colorButton =(Button) v.findViewById(R.id.colorButton_dialogSettings);
public void onClick(View v) {
// When button is clicked, call up to owning activity.
((FragmentDialog)getActivity()).showDialog();
System.out.println("OnClick");
}
});
return v;
我只是给你看重要的部分。。我希望您能在代码中找到它们各自的行
final View view = inflater.inflate(R.layout.dialog_settings, null);
// inflating your view..for drawback, this line is [A]
您的colorButton
引用了view.findViewById(R.id.colorButton\u dialogSettings)
,它来自视图组view
。您为它引用了onclick侦听器
builder.setView(inflater.inflate(R.layout.dialog_settings, null))
这里的代码设置对话框的内容视图。它会在布局中充气并完成它的工作。。因此,最终您的builder
不是将其内容视图引用到view
,而是引用一个新的R.layout.dialog\u settings
layout
所以要解决这个问题就这么做吧
builder.setView(view) // hope you know the view parameter
视图是您在第[A]行实例化的内容
希望我讲得有道理,对你来说足够清楚。让我知道它是否有帮助。尝试更改为colorButton.setOnClickListener(新的DialogInterface.OnClickListener()
我不能使用DialogInterface.OnClickListener
因为DialogFragment
没有实现它,我不敢相信我错过了这一个…谢谢!
builder.setView(view) // hope you know the view parameter