作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在制作一个多选项目的 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);
}
}
});
}
}
最佳答案
让您的 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();
}
关于android - 仅在选中项目时激活 AlertDialog 的 BUTTON_POSITIVE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52084256/
我知道在 ICS 之前,AlertDialog 中的标准顺序是“确定”/“取消”,而在 ICS 中已经发生了变化(标准顺序变成了“取消”/“确定”) 但是,即使我使用 alert.setButton(
我正在制作一个多选项目的 AlertDialog,当用户按下“确定”时获取选中的项目。这些项目将显示在 TextView 上。 我的问题是我想激活 AlertDialog 的“确定”BUTTON_PO
(不好意思,发现这个问题已经有人回答了,见下文) 所以,我先tried to extend the AlertDialog这样我就可以用弹出窗口中需要的 EditText 做一些事情,但是当 I co
我是一名优秀的程序员,十分优秀!