Android 禁用AlertDialog上的几个单选按钮
我正在示例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 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();
看看问题和答案,尤其是第二个。谢谢。让我检查一下。那个例子不公平,我想把收音机按钮放在前面。无论如何,谢谢。我将使用自定义布局。看看问题和答案,尤其是第二个。谢谢。让我检查一下。那个例子不公平,我想把收音机按钮放在前面。无论如何,谢谢。我将使用自定义布局。哇,这正是我需要的。谢谢。:)哇,这正是我需要的。谢谢。:)