我正在制作AlertDialog
的多选项目,当用户按“确定”时,会得到选中的项目。这些项目将显示在TextView
上。
我的问题是,仅当选择至少一项时,我才想激活AlertDialog
的“确定” BUTTON_POSITIVE。我的完整代码以及如何解决这个问题。
public class MainActivity extends AppCompatActivity {
Button mORder;
TextView mItemSelected;
String[] listItems;
boolean[]checkedItems;
ArrayList<Integer> mUserItems= new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mORder=findViewById(R.id.btnOrder);
mItemSelected=findViewById(R.id.selectedItems);
listItems=getResources().getStringArray(R.array.shopping_items);
checkedItems=new boolean[listItems.length];
mORder.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final AlertDialog.Builder mBuilder= new AlertDialog.Builder(MainActivity.this);
mBuilder.setTitle("Practice language");
mBuilder.setMultiChoiceItems(listItems, checkedItems, new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int position, boolean ischecked) {
if(ischecked){
mUserItems.add(position);
}
else {
mUserItems.remove(Integer.valueOf(position));
}
}
});
mBuilder.setCancelable(false);
mBuilder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int position) {
String item="";
for(int i=0 ;i<mUserItems.size();i++){
item= item + listItems[mUserItems.get(i)];
if (i != mUserItems.size()-1){
item=item+ ", ";
}
}
mItemSelected.setText(item);
}
});
final AlertDialog dialog =mBuilder.create();
dialog.show();
Log.i("userList ",""+mUserItems.size());
if((mUserItems.size()==0)){
((AlertDialog)dialog).getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false);
}
else {
((AlertDialog)dialog).getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(true);
}
}
});
}
}
答案 0 :(得分:1)
让您的MainActivity
有一个AlertDialog
字段:
private AlertDialog dialog;
分配创建的AlertDialog
:
// ... at the end of onCreate()...
dialog = builder.create();
dialog.show();
Log.i("userList ",""+mUserItems.size());
togglePositiveButtonEnabled();
新方法togglePositiveButtonEnabled()
检查 mUserList 是否为空,并启用/禁用对话框的OK Button
:
void togglePositiveButtonEnabled(){
if(dialog == null) return;
if((mUserItems.size()==0)){
dialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false);
}
else{
dialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(true);
}
}
也可以从OnMultiChoiceClickListener
内部调用此方法:
@Override
public void onClick(DialogInterface dialogInterface, int position, boolean ischecked){
if(ischecked){
mUserItems.add(position);
}
else {
mUserItems.remove(Integer.valueOf(position));
}
togglePositiveButtonEnabled();
}