Reputation: 101
I am making an AlertDialog
of multi choice items, get the checked items when the users press "ok". The items will be displayed on TextView
.
My problem is that I want to activate the "ok" BUTTON_POSITIVE of the AlertDialog
only when at least one item is selected. My full code and how I think to solve this..
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);
}
}
});
}
}
Upvotes: 1
Views: 92
Reputation: 13019
Let your MainActivity
have a field for the AlertDialog
:
private AlertDialog dialog;
Assign the created AlertDialog
:
// ... at the end of onCreate()...
dialog = builder.create();
dialog.show();
Log.i("userList ",""+mUserItems.size());
togglePositiveButtonEnabled();
The new method togglePositiveButtonEnabled()
checks if mUserList is empty and enables/disables the OK Button
of the dialog:
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);
}
}
This method can also be called from inside the OnMultiChoiceClickListener
:
@Override
public void onClick(DialogInterface dialogInterface, int position, boolean ischecked){
if(ischecked){
mUserItems.add(position);
}
else {
mUserItems.remove(Integer.valueOf(position));
}
togglePositiveButtonEnabled();
}
Upvotes: 1