在调用适配器的OnClickListener期间关闭AlertDialog

时间:2013-06-23 15:49:04

标签: android listview alertdialog

我的 DialogFragment

中有下一个代码
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    Log.i(getClass().getName(), "onCreateDialog");
    final FileSystemAdapter adapter = getAdapter();
    adapter.showFS(null);

    AlertDialog b = new AlertDialog.Builder(getActivity())
            .setTitle(title)
            .setCancelable(false)
            .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    //some actions
                }
            })
            .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    dismiss();
                }
            })
            .setAdapter(adapter, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    adapter.showFS(adapter.getItem(i));
                }
            })
            .create();
    return b;
}

点击列表元素后,最后 onClick 方法正在调用,然后对话框正在关闭。


如何阻止此行为并保持对话框打开,直到关闭方法调用?

1 个答案:

答案 0 :(得分:7)

您可以创建一个新的ListView并将其设置为AlertDialog.Builder中的自定义视图,并将您的OnClickListener代码放入listView中的OnItemClickListener。尝试这样的事情:

ListView listView = new ListView(this);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new ListView.OnItemClickListener() {
    public void onItemClick(AdapterView<?> listView, View itemView, int position, long itemId) {
         adapter.showFS(adapter.getItem(position));
    }
});

AlertDialog b = new AlertDialog.Builder(getActivity())
        .setTitle(title)
        .setCancelable(false)
        .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                //some actions
            }
        })
        .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                dismiss();
            }
        })
        .setView(listView)
        .create();
return b;