2012-09-27 37 views
0

我在AlertDialog.Builder上使用setAdapter()爲我的列表提供了自己的定製ListAdapter。但是在我的DialogInterface.OnClickListener()被調用後,對話框會自動解除。使用多項選擇時不退出對話框AlertDialog

下面存在AlertController.createListView(...)的Android源代碼,導致我的對話框駁回:

if (mOnClickListener != null) { 
    listView.setOnItemClickListener(new OnItemClickListener() { 
    public void onItemClick(AdapterView parent, View v, int position, long id) { 
     mOnClickListener.onClick(dialog.mDialogInterface, position); 
     if (!mIsSingleChoice) { 
     dialog.mDialogInterface.dismiss(); 
     } 
    } 
    }); 
} 

目前我使用AlertDialog.Builder.setSingleChoiceItems(..)代替setAdapter(..)。有沒有更好的方法來使用自定義ListAdapter並允許在對話框中進行多項選擇?我發現使用setSingleChoiceItems作爲多選列表會令人誤解。

回答

2

您可以使用Handler類中的任何一種方法關閉AlertDailog。參見以下代碼,

if (mOnClickListener != null) 
{ 
    listView.setOnItemClickListener(new OnItemClickListener() 
    { 
     public void onItemClick(AdapterView parent, View v, int position, long id) 
     { 
      mOnClickListener.onClick(dialog.mDialogInterface, position); 
      if (!mIsSingleChoice) 
      { 
       //dialog.mDialogInterface.dismiss(); 
       // call handler class as follows, 
       handler.sendMessage(handler.obtainMessage()); 
      } 
     } 
    }); 
} 


private Handler handler = new Handler() 
{ 
     @Override 
     public void handleMessage (Message message) 
     { 
      dialog.mDialogInterface.dismiss(); 
     } 
}; 
3
@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 
    AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); 
    m_adapter = new MyAdapter(); 
    builder.setAdapter(m_adapter, new OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 

     } 
    }); 

    final AlertDialog alertDialog = builder.create(); 
    // override default behavior of dismissing dialog on clicking list item 
    final ListView listView = alertDialog.getListView(); 
    listView.setOnItemClickListener(new OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, 
       int position, long id) { 

     } 
    }); 

    return alertDialog; 
}