是否可以从适配器构建多重提示警报对话框?

时间:2013-07-17 20:58:00

标签: android android-listview

我的AlertDialog设置几乎与此链接中描述的相同:https://stackoverflow.com/a/4697761/2593088
我用它来从SD卡中提取照片,所以我在列表中有照片和旁边的名字。如果我只需要一次拉一张照片,它的效果会非常好,但如果我可以选择所有照片并将它们全部拉到一起,那就更好了。问题是只要单击一个对话框就关闭了。我已经搜索了这个方法,但我发现的每种方式都不适用于我需要的东西。一种方法是在对话框OnShow监听器中覆盖onClick监听器,但我只能想象如何覆盖正/负/中性按钮,而不是列表项。在构建对话框时,我也能够在没有使用setMultiChoiceItems的图标的情况下使其工作,所以如果有一种简单的方法来在这一点上添加图标也可以。我只是想知道是否有一种简单的方法可以用我拥有的东西来做,或者我是否必须编写自己的客户适配器或somthing。
任何帮助都是赞赏的。

编辑: 这里有我的工作正常,除了没有图标。

dialog = builder.setAdapter(adapter, null).setMultiChoiceItems(mFileList, null, new OnMultiChoiceClickListener() {

    @Override
    public void onClick(DialogInterface arg0, int arg1,
            boolean arg2) {


        String selectedFile = mFileList[arg1];
        if(selectedFile.equals("Up One Folder")) selectedFile = "..";
        String mChosenFile = tempDir + "/" + selectedFile;
        File f = new File(mChosenFile);
        if(f.isDirectory()) {
            // it is a directory, clear all selections and go to the next directory

            selectedImages.clear();

            dialog.dismiss();
            loadFileList(mChosenFile);
            getFiles(false);


        } else {
            if(arg2) {
                selectedImages.add(tempDir + "/" + selectedFile);
            }
        }


    }

})

我希望同时使用setAdapter和setMultiChoiceItems可以正常工作,但如果设置了multichoice项,则设置适配器不会执行任何操作。不幸的是,setMultiChoiceItems没有使用适配器的构造函数。

2 个答案:

答案 0 :(得分:1)

我最终不得不编写自己的自定义对话框,而不是使用setMultiChoiceItems。我应该知道,从我注意到没有带适配器的多选构造函数的那一刻起,我就必须这样做。我只是希望有一种解决方法,因为可以使用适配器构建默认列表对话框。希望这会在未来发生变化。

答案 1 :(得分:0)

*我实际上从未在Alert Dialog中使用过适配器,但是我用这种方式实现了多重警报对话框:

LinearLayout settingLayout = new LinearLayout(MainActivity.this) ;
settingLayout.setOrientation(LinearLayout.VERTICAL) ;

final RadioButton radOptionTen = new RadioButton(MainActivity.this) ;
final RadioButton radOptionTwenty = new RadioButton(MainActivity.this) ;
final RadioButton radOptionThirty = new RadioButton(MainActivity.this) ;
final RadioButton radOptionFifty = new RadioButton(MainActivity.this) ;
final RadioButton radOptionHundred = new RadioButton(MainActivity.this) ;
final RadioButton radOptionTwoHundred = new RadioButton(MainActivity.this) ;

radOptionTen.setText("10") ;
radOptionTwenty.setText("20") ;
radOptionThirty.setText("30") ;
radOptionFifty.setText("50") ;
radOptionHundred.setText("100") ;
radOptionTwoHundred.setText("200") ;

radOptionTen.setOnClickListener(new OnClickListener(){
    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
    }

}) ;

radOptionTwenty.setOnClickListener(new OnClickListener(){
    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub

    }
}) ;

radOptionThirty.setOnClickListener(new OnClickListener(){
    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub

    }

}) ;

radOptionFifty.setOnClickListener(new OnClickListener(){
    @Override
    public void onClick(View v) {
          // TODO Auto-generated method stub

    }

}) ;

radOptionHundred.setOnClickListener(new OnClickListener(){
    @Override
    public void onClick(View v) {
          // TODO Auto-generated method stub

}

}) ;

radOptionTwoHundred.setOnClickListener(new OnClickListener(){
    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
    }

}) ;

settingLayout.addView(radOptionTen) ;
settingLayout.addView(radOptionTwenty) ;
settingLayout.addView(radOptionThirty) ;
settingLayout.addView(radOptionFifty) ;             
settingLayout.addView(radOptionHundred) ;
settingLayout.addView(radOptionTwoHundred) ;

new AlertDialog.Builder(UserSettingsActivity.this)
.setIcon(R.drawable.alert_icon)
.setTitle("Title!")
.setMessage("Message...")
.setView(settingLayout) 
.setPositiveButton("Save", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        // TODO Auto-generated method stub
    }
}) 
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
            // TODO Auto-generated method stub

    }
}) 
.show() 

您可以删除对话框的正面和负面按钮,并更改您需要的布局或小部件。我认为,在你的情况下,你想使用按钮,所以用按钮替换单选按钮并删除对话框按钮