仅在选中项目时激活 AlertDialog BUTTON_POSITIVE
Activate BUTTON_POSITIVE of AlertDialog only when an item is checked
我正在做一个 AlertDialog
的多选项目,当用户按下 "ok" 时得到选中的项目。这些项目将显示在 TextView
。
我的问题是我想激活 AlertDialog
的 "ok" 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是否为空以及enables/disables对话框的OKButton
:
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();
}
我正在做一个 AlertDialog
的多选项目,当用户按下 "ok" 时得到选中的项目。这些项目将显示在 TextView
。
我的问题是我想激活 AlertDialog
的 "ok" 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是否为空以及enables/disables对话框的OKButton
:
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();
}