Android 对话框片段中的RadioButton侦听器
我试图实现RadioGroup视图并将其放入DialogFragment中,但出现了一些问题。我已经学习了这个教程 但视图是在DialogFragment中初始化的,而不是活动:Android 对话框片段中的RadioButton侦听器,android,radio-button,listener,Android,Radio Button,Listener,我试图实现RadioGroup视图并将其放入DialogFragment中,但出现了一些问题。我已经学习了这个教程 但视图是在DialogFragment中初始化的,而不是活动: public class MenuDialog extends DialogFragment { public MenuDialog(){} @Override public void onCreate(Bundle savedInstanceState) { super.
public class MenuDialog extends DialogFragment {
public MenuDialog(){}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.menu_layout, container);
this.getDialog().setTitle("title");
return view;
}
public void onRadioButtonClicked(View view) {
boolean checked = ((RadioButton) view).isChecked();
switch(view.getId()) {
case R.id.radio1:
if(checked) {
Log.i("MENU", ((RadioButton)view).getText());
}
break;
case R.id.radio2:
if(checked) {
Log.i("MENU", ((RadioButton)view).getText());
}
break;
case R.id.radio3:
if(checked) {
Log.i("MENU", ((RadioButton)view).getText());
}
break;
case R.id.radio4:
if(checked) {
Log.i("MENU", ((RadioButton)view).getText());
}
break;
}
this.getDialog().dismiss();
}
}
xml:
怎么了?问题是,如果您在xml文件中为任何
视图
指定回调属性,它应该位于活动
代码中,而不是片段代码中我宁愿在片段中实现click处理程序并动态添加侦听器(通过java而不是xml)。
所以我会这样做:
public class MenuDialog extends DialogFragment implements OnClickListener{
[...]
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.menu_layout, container);
view.findViewById(R.id.radio1).setOnClickListener(this);
view.findViewById(R.id.radio2).setOnClickListener(this);
//and so on [...]
this.getDialog().setTitle("title");
return view;
}
@Override
public void onClick(View v){
[...]
}
你需要把听众和广播组联系起来,你可以这样做
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.menu_layout, container);
this.getDialog().setTitle("title");
view.findViewById(R.id.radio_group).setOnCheckedChangeListener(...);
return view;
}
为片段实现RadioButton.OnCheckedChangeListener。根据单选按钮设置CheckedChangeListener
public class MenuDialog extends DialogFragment implements RadioButton.OnCheckedChangeListener{
//..
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.menu_layout, container);
this.getDialog().setTitle("title");
((RadioButton)view.findViewById(R.id.radio1)).setOnCheckedChangeListener(this);
((RadioButton)view.findViewById(R.id.radio2)).setOnCheckedChangeListener(this);
// and so on
return view;
}
@Override
public void onCheckedChanged(CompoundButton v, boolean checked) {
switch(v.getId()) {
case R.id.radio1:
// todo
break;
case R.id.radio2:
// todo
break;
// and so on..
}
this.getDialog().dismiss();
}
顺便说一句,请删除片段中的onRadioButtonClicked(),并在您按照的说明操作时,为xml中的RadioButton删除“android:onClick=“onRadioButtonClicked””,可能我有点晚了,但发现了此解决方案。API 23的工程 YourDialogFragment.kt
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
return requireActivity().let {
AlertDialog.Builder(it)
.setTitle("Your title here")
.setSingleChoiceItems(
R.array.answersStringAray, // resource in res/values/arrays.xml
1, // value of choosed item in array above
clickListener // Implements DialogInterface.OnClickListener
)
.setNegativeButton(R.string.cancel, clickListener)
.create()
}
}
class YourViewModel : ViewModel(), DialogInterface.OnClickListener {
override fun onClick(dialog: DialogInterface?, which: Int) {
when (which) {
DialogInterface.BUTTON_POSITIVE -> {}
DialogInterface.BUTTON_NEGATIVE -> {}
DialogInterface.BUTTON_NEUTRAL -> {}
0 -> {} // all your answers would be non-negative
1 -> {}
}
}
}
YourViewModel.kt
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
return requireActivity().let {
AlertDialog.Builder(it)
.setTitle("Your title here")
.setSingleChoiceItems(
R.array.answersStringAray, // resource in res/values/arrays.xml
1, // value of choosed item in array above
clickListener // Implements DialogInterface.OnClickListener
)
.setNegativeButton(R.string.cancel, clickListener)
.create()
}
}
class YourViewModel : ViewModel(), DialogInterface.OnClickListener {
override fun onClick(dialog: DialogInterface?, which: Int) {
when (which) {
DialogInterface.BUTTON_POSITIVE -> {}
DialogInterface.BUTTON_NEGATIVE -> {}
DialogInterface.BUTTON_NEUTRAL -> {}
0 -> {} // all your answers would be non-negative
1 -> {}
}
}
}
那么监听器是如何实现的,问题是找不到监听器,发布您的监听器和xml pleasepost,用缺少的代码修改,所以我需要修改onCreateView代码并手动添加监听器?如果您想直接从片段将onClick回调与视图关联,那么,是的,您应该从片段的
onCreateView()
设置OnClickListener,或者使用OnCheckedChangeListener代替OnClickListener
class YourViewModel : ViewModel(), DialogInterface.OnClickListener {
override fun onClick(dialog: DialogInterface?, which: Int) {
when (which) {
DialogInterface.BUTTON_POSITIVE -> {}
DialogInterface.BUTTON_NEGATIVE -> {}
DialogInterface.BUTTON_NEUTRAL -> {}
0 -> {} // all your answers would be non-negative
1 -> {}
}
}
}