3

我有一个简单的列表视图,在警报对话框中有一些复选框。我需要选择添加全选/全选,但您无法在警报对话框中调出菜单,我想通过按钮执行此功能。从我所看到的任何类型的按钮(正面、中性和负面)来看,无论如何都会关闭对话框。

那么,这可能吗?如果没有,我有什么选择?我最后的缓解方法是简单地创建一个新视图并重新创建所有内容。新观点是最好的解决方案吗?

4

5 回答 5

6

那么,这可能吗?

不是来自AlertDialogAFAIK 中的标准按钮。

如果没有,我有什么选择?

这里有一些:

  1. 不提供全选/无
  2. 不要使用AlertDialog,而是使用以对话为主题的活动
  3. 不要使用AlertDialog,而是使用其他的子类Dialog
  4. 您引用的选项(不要使用setAdapter(),而是View为对话框内容创建自己的选项)
  5. 根本不要使用 a Dialog,而是使用ListActivitystart via startActivityForResult()(类似于 #2,只是不用担心主题)
于 2010-04-08T04:17:31.293 回答
5

您必须覆盖按钮的 onClickListener。例如,对于中性按钮,您将拥有如下内容:

AlertDialog dialog = builder.create();
dialog.setButton(AlertDialog.BUTTON_NEUTRAL, "Neutral", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
    } 
});
dialog.setButton(AlertDialog.BUTTON_POSITIVE, "Positive", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int which) {
    } 
});
dialog.show();

Button neutralButton = dialog.getButton(DialogInterface.BUTTON_NEUTRAL);
neutralButton.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View onClick) {                 
        /**
        *
        * your code
        * 
        */

    }
});
于 2012-08-27T09:12:52.343 回答
0

那么,这可能吗?

您可以尝试使用以下方法将自定义视图放置在 AlertDialog 上:

android.app.AlertDialog.Builder.setView(View view)

该视图可以包含您的按钮。只需将 onClickListener 附加到将与您的列表视图一起操作的按钮。

于 2010-04-08T18:48:58.477 回答
0

您是否尝试过扩展 AlertDialog 类并让它实现 OnCLickListener

public class MyDialog extends AlertDialog implements OnClickListener {
    private Button myButton;

    public void onCreate( Bundle savedInstanceState ) {
        super.onCreate( savedInstanceState );
        // use LayoutInflater to get at custom button
        LayoutInflater layoutInflater = (LayoutInflater)getContext().getSystemService( Context.LAYOUT_INFLATER_SERVICE );
        View contentView = layoutInflater.inflate( R.layout.mydialog_layout, null );

        // pull button from layout, set listener
        myButton = (Button)contentView.findViewById( R.id.myButtonId );
        myButton.setOnClickListener( this );

        setContentView( contentView );
    }

    public void onClick( View v ) {
        if ( v.getId() == R.id.myButtonId ) {
            // DO your button actions.
        }
    }
}

按照此模板,您可以放置​​所需的任何按钮并在对话框本身中创建自己的功能。您也可以在运行时创建自己的 Button,但您必须做额外的工作来配置按钮的文本、大小、图标等。

然后,您可以在 onCreateDialog() 调用下的活动中创建对话框。

protected Dialog onCreateDialog( int id ) {
    MyDialog dialog = new MyDialog( this, 0 );
    dialog.setOnCancelListener( this );
    dialog.setOnDismissListener( this );
    return dialog;
}

希望这可以帮助。

于 2011-05-17T06:57:54.513 回答
0

有可能的。解决方案是

  1. 重写dismiss方法什么都不做。这将防止在单击任何按钮时关闭对话框。或者,您还可以保存原始的关闭。

  2. 修改您的 OnClickListener 以便在单击您想要的按钮时调用对话框的超类(即AlertDialog)的 dismiss() (即)。super.dismiss()

我通常让 Dialog 类成为监听器,所以我会做这样的事情

公共类 MyAlertDialog 扩展 AlertDialog 实现 OnClickListener {

    // 其他方法
    @覆盖
    公共无效解雇(){

    }

    // 超类的关闭,当 OnClickListener 不是这个对话框时可能会派上用场
    公共无效 normalDismiss() {
        super.dismiss();
    }

    public void onClick(DialogInterface dialog, int which) {
        开关(哪个){
        案例 BUTTON_NEGATIVE:
            // 处理你的事件
            super.dismiss();
            休息;
        案例 BUTTON_NEUTRAL:
            // 处理你的事件
            休息;
        案例 BUTTON_POSITIVE:
        默认:
            // 处理你的事件
            super.dismiss();
            休息;
        }
    }

}

这样它只会在单击按钮 NEGATIVE 或 POSITIVE 时关闭对话框,但在按钮 NEUTRAL 时保持对话框显示。

于 2012-10-10T04:30:34.180 回答