如何从android中的listview按钮显示警报确认对话框

时间:2016-02-25 16:18:53

标签: android alertdialog android-alertdialog custom-adapter android-viewholder

点击listview 中的按钮后,我试图显示确认对话框

getView 方法中的 CustomAdapter 中有 setOnClickListener

但是在点击监听器上我收到以下错误:

02-25 21:36:32.065 20631-20631/com.themsg.chat W/Toast: From com.themsg.chat, go ahead.
02-25 21:36:32.095 20631-20631/com.themsg.chat W/System.err: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
02-25 21:36:32.095 20631-20631/com.themsg.chat W/System.err:     at android.view.ViewRootImpl.setView(ViewRootImpl.java:569)
02-25 21:36:32.095 20631-20631/com.themsg.chat W/System.err:     at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:266)
02-25 21:36:32.095 20631-20631/com.themsg.chat W/System.err:     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
02-25 21:36:32.095 20631-20631/com.themsg.chat W/System.err:     at android.app.Dialog.show(Dialog.java:286)

这是我的代码:

holder.tvm.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                try {
                    chatroomMembers = getItem(position);

                    Toast.makeText(getContext(), "here", Toast.LENGTH_LONG).show();
                    new AlertDialog.Builder(v.getContext())
                        .setTitle("Title")
                        .setMessage("Do you really want to whatever?")
                        .setIcon(android.R.drawable.ic_dialog_alert)
                        .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {

                            public void onClick(DialogInterface dialog, int whichButton) {
                                deleteUserFromChatrrom(chatroomMembers.getId(), SessionData.getInstance().getCurrentChatroom(), position);
                            }})
                        .setNegativeButton(android.R.string.no, null).show();

                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });

2 个答案:

答案 0 :(得分:2)

在Class CustomAdapter中,您将一个变量mContext和一个ArrayList数据声明为ListView

    ArrayList<String> datasource;
    Context mContext;

创建一个构造函数:

    public AdapterAudio(Context mContext, ArrayList<String> data) {
    super();
    this.datasoure = data;
    this.mContext = mContext;
}

当您从Activity调用CustomAdapter时,“Activity_Main.this”是您需要的上下文

   CustomAdapter adapter = new CustomAdapter(Activity_Main.this, listAudio_hienthi10);

现在你有一个Context,使用变量mContext声明替换

    "getContext()", "v.getContext()"

现在,您可以在所需的CustomAdapter中单击按钮时显示或显示任何对话框。 享受您的代码!

答案 1 :(得分:0)

尝试使用getApplicationContext()

更改getContext()