0

我正在開發我的第一個Android應用程序。我想顯示一個自定義多選的對話框。我可以做到,但是當我點擊一個項目時,除非再次調用builder.show(),否則對話框將被關閉。 我的代碼是:點擊後自動關閉警報對話框 - Android

 case R.id.menu_references: 
       final boolean[] oldValue = checkedItems.clone(); 
       final AlertDialog.Builder referenceBuilder = new AlertDialog.Builder(this); 
       referenceBuilder.setPositiveButton(context.getString(R.string.save), new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int whichButton) { 
         if (!Arrays.equals(checkedItems, oldValue)) { 
          saveSettings(oldValue, checkedItems); 
         } 
        } 
       }); 
       final BaseAdapter adapter = new ReferencesAdapter(context, checkedItems); 
       referenceBuilder.setAdapter(adapter, new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         checkedItems[which] = !checkedItems[which]; 
         adapter.notifyDataSetChanged(); 
         referenceBuilder.show(); //IF I REMOVE THIS LINE, THE DIALOG IS BEING CLOSED 
        } 
       }); 
       referenceBuilder.setNegativeButton(context.getString(R.string.cancel), new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int whichButton) { 
         checkedItems = oldValue; 
         dialog.dismiss(); 
        } 
       }); 
       referenceBuilder.create().show(); 
       return true; 

和適配器類:

public class ReferencesAdapter extends BaseAdapter { 
     private LayoutInflater inflater; 
     private boolean checkedItems[]; 
     private Context context; 
     private SettingOption[] values; 

     public ReferencesAdapter(Context context, boolean[] checkedItems) { 
      super(); 
      this.checkedItems = checkedItems; 
      inflater = LayoutInflater.from(context); 
      this.values = SettingOption.values(); 
      this.context = context; 
     } 

     @Override 
     public int getCount() { 
      return SettingOption.values().length; 
     } 

     @Override 
     public Object getItem(int position) { 
      return position; 
     } 

     @Override 
     public long getItemId(int position) { 
      return position; 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      ViewHolder holder = null; 
      if(convertView == null) { 
       convertView = inflater.inflate(R.layout.activity_reference, null); 
       holder = new ViewHolder(); 
       holder.check_title =(CheckedTextView)convertView.findViewById(R.id.setting_check); 
       holder.check_image =(ImageView)convertView.findViewById(R.id.setting_image); 
       convertView.setTag(holder); 
      } else { 
       holder =(ViewHolder)convertView.getTag(); 
      } 
      SettingOption option = values[position]; 
      holder.check_title.setText(option.toString()); 
      holder.check_image.setBackgroundDrawable(context.getResources().getDrawable(option.getDrawable())); 
      if(checkedItems[position]) { 
       holder.check_title.setChecked(true); 
      } else { 
       holder.check_title.setChecked(false); 
      } 
      return convertView; 
     } 

     class ViewHolder { 
      CheckedTextView check_title; 
      ImageView check_image; 
     } 
    } 

我在做什麼錯?

回答

0

如果你想捕捉用戶的響應,不允許對話框取消,你應該使用

final AlertDialog.Builder referenceBuilder = new AlertDialog.Builder(this); 
referenceBuilder.setCancelable(false); 

這樣的對話就不會消失。除非用戶按下一些對話框按鈕。