Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 对话框片段中的RadioButton侦听器_Android_Radio Button_Listener - Fatal编程技术网

Android 对话框片段中的RadioButton侦听器

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.

我试图实现RadioGroup视图并将其放入DialogFragment中,但出现了一些问题。我已经学习了这个教程

但视图是在DialogFragment中初始化的,而不是活动:

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 -> {}
        }
    }
}