Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.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 禁用AlertDialog上的几个单选按钮_Android_Android Alertdialog_Android Radiobutton - Fatal编程技术网

Android 禁用AlertDialog上的几个单选按钮

Android 禁用AlertDialog上的几个单选按钮,android,android-alertdialog,android-radiobutton,Android,Android Alertdialog,Android Radiobutton,我正在示例AlertDialog中显示单选按钮 AlertDialog levelDialog; final CharSequence[] items = {" Easy "," Medium "," Hard "," Very Hard "}; // Creating and Building the Dialog AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitl

我正在示例AlertDialog中显示单选按钮

AlertDialog levelDialog;
final CharSequence[] items = {" Easy "," Medium "," Hard "," Very Hard "};

    // Creating and Building the Dialog
    AlertDialog.Builder builder = new AlertDialog.Builder(this);

    builder.setTitle("Select The Difficulty Level");

    builder.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int item) {


            switch(item)
            {
                case 0:
                    // Your code when first option selected
                    break;
                case 1:
                    // Your code when 2nd  option selected
                    break;
                case 2:
                    break;
                case 3:
                    break;

            }

          //  levelDialog.dismiss();
        }
    });

    builder.setPositiveButton("Okay", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {

        }
    });

    levelDialog = builder.create();
    levelDialog.show();
我得到这个作为输出

我需要禁用第三个选项“硬”。表示我想显示项目,但不可选择。它应该处于禁用模式

可以通过修改此代码来实现吗?或者我应该膨胀自定义布局并在builder.setView()上设置它?

另一种黑客方法是通过订阅对话框的onShow事件获取对视图的引用,并更改onClick处理程序

final AlertDialog levelDialog = builder.create();

final int itemPositionToDisable = 2;

levelDialog.setOnShowListener(new DialogInterface.OnShowListener() {
    @Override
    public void onShow(DialogInterface dialog) {

        final ListView listView = levelDialog.getListView();

        //Store a reference to the default listener. We need to call it for references that have not been disabled.
        final AdapterView.OnItemClickListener defaultOnItemClickListener = listView.getOnItemClickListener();

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                if(position != itemPositionToDisable)
                    defaultOnItemClickListener.onItemClick(parent, view,position, id);
            }
        });

        AppCompatCheckedTextView view = (AppCompatCheckedTextView) listView.getChildAt(itemPositionToDisable);

        //Disable on click listener so that checkbox is not activated.
        view.setOnClickListener(null);

        //Disable the view.
        view.setEnabled(false);
    }
});

levelDialog.show();
final AlertDialog levelDialog=builder.create();
最终int itemPositionToDisable=2;
levelDialog.setOnShowListener(新的DialogInterface.OnShowListener(){
@凌驾
公共void onShow(对话框界面对话框){
最终ListView ListView=levelDialog.getListView();
//存储对默认侦听器的引用。我们需要为尚未禁用的引用调用它。
final AdapterView.OnItemClickListener defaultOnItemClickListener=listView.getOnItemClickListener();
setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
如果(位置!=itemPositionToDisable)
defaultOnItemClickListener.onItemClick(父级、视图、位置、id);
}
});
AppCompatCheckedTextView=(AppCompatCheckedTextView)listView.getChildAt(itemPositionToDisable);
//禁用单击侦听器,使复选框不被激活。
view.setOnClickListener(null);
//禁用视图。
view.setEnabled(false);
}
});
levelDialog.show();
另一种黑客方法是通过订阅对话框的onShow事件获取对视图的引用,并更改onClick处理程序

final AlertDialog levelDialog = builder.create();

final int itemPositionToDisable = 2;

levelDialog.setOnShowListener(new DialogInterface.OnShowListener() {
    @Override
    public void onShow(DialogInterface dialog) {

        final ListView listView = levelDialog.getListView();

        //Store a reference to the default listener. We need to call it for references that have not been disabled.
        final AdapterView.OnItemClickListener defaultOnItemClickListener = listView.getOnItemClickListener();

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                if(position != itemPositionToDisable)
                    defaultOnItemClickListener.onItemClick(parent, view,position, id);
            }
        });

        AppCompatCheckedTextView view = (AppCompatCheckedTextView) listView.getChildAt(itemPositionToDisable);

        //Disable on click listener so that checkbox is not activated.
        view.setOnClickListener(null);

        //Disable the view.
        view.setEnabled(false);
    }
});

levelDialog.show();
final AlertDialog levelDialog=builder.create();
最终int itemPositionToDisable=2;
levelDialog.setOnShowListener(新的DialogInterface.OnShowListener(){
@凌驾
公共void onShow(对话框界面对话框){
最终ListView ListView=levelDialog.getListView();
//存储对默认侦听器的引用。我们需要为尚未禁用的引用调用它。
final AdapterView.OnItemClickListener defaultOnItemClickListener=listView.getOnItemClickListener();
setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
如果(位置!=itemPositionToDisable)
defaultOnItemClickListener.onItemClick(父级、视图、位置、id);
}
});
AppCompatCheckedTextView=(AppCompatCheckedTextView)listView.getChildAt(itemPositionToDisable);
//禁用单击侦听器,使复选框不被激活。
view.setOnClickListener(null);
//禁用视图。
view.setEnabled(false);
}
});
levelDialog.show();

看看问题和答案,尤其是第二个。谢谢。让我检查一下。那个例子不公平,我想把收音机按钮放在前面。无论如何,谢谢。我将使用自定义布局。看看问题和答案,尤其是第二个。谢谢。让我检查一下。那个例子不公平,我想把收音机按钮放在前面。无论如何,谢谢。我将使用自定义布局。哇,这正是我需要的。谢谢。:)哇,这正是我需要的。谢谢。:)