Java arrayAdapter中的AlertDialog不工作

Java arrayAdapter中的AlertDialog不工作,java,android,onclicklistener,android-alertdialog,android-context,Java,Android,Onclicklistener,Android Alertdialog,Android Context,我正试图让我的alertDialog在arrayAdapter中工作。这就是我的函数的样子 @Override public View getView(final int position, View convertView, ViewGroup parent) { final Noodnummers currentNoodnummer = noodnummers.get(position); LayoutInflater inflater =

我正试图让我的alertDialog在arrayAdapter中工作。这就是我的函数的样子

   @Override
    public View getView(final int position, View convertView, ViewGroup parent) {

        final Noodnummers currentNoodnummer = noodnummers.get(position);

        LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        final View rowView = inflater.inflate(layoutResourceId, parent, false);

        TextView txt_noodnummer_name = (TextView) rowView.findViewById(R.id.txt_noodnummer_name);
        txt_noodnummer_name.setText(currentNoodnummer.naam);

        TextView txt_noodnummer_telefoon = (TextView) rowView.findViewById(R.id.txt_noodnummer_telefoon);
        txt_noodnummer_telefoon.setText(Html.fromHtml(currentNoodnummer.telefoonNummer));
        txt_noodnummer_telefoon.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(final View v) {
                //To change body of implemented methods use File | Settings | File Templates.
                try {

                    new AlertDialog.Builder(this)
                            .setTitle("")
                            .setMessage("Bent u zeker dat u" + currentNoodnummer.telefoonNummer + "wilt bellen?")
                            .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog, int which) {
                                    // continue with delete
                                    String uri = currentNoodnummer.telefoonNummer;
                                    Intent intent = new Intent(Intent.ACTION_CALL);
                                    intent.setData(Uri.parse(uri));
                                    v.getContext().startActivity(intent);
                                }
                            })
                            .setNegativeButton("No", new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog, int which) {
                                    // do nothing
                                }

                            })
                            .show();


                } catch (ActivityNotFoundException activityException) {
                    Log.e("genkonstage", "Call failed", activityException);
                }

            }
        });



        return rowView;
    }
第一个问题是,
newalertdialog.Builder(this)
在单词
this
上给了我一个错误。然后我发现我可能应该使用上下文。但是当我说
newalertdialog.Builder(context)
时,我没有得到任何错误,但当我单击应用程序时崩溃了

有人能帮我吗

编辑

06-18 10:56:20.689  12980-12980/be.appmax.genkOnStage          E/AndroidRuntime: FATAL EXCEPTION: main
        android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
        at android.view.ViewRootImpl.setView(ViewRootImpl.java:571)
        at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:246)
        at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
        at android.app.Dialog.show(Dialog.java:281)
        at android.app.AlertDialog$Builder.show(AlertDialog.java:951)
        at be.appmax.genkOnStage.adapters.NoodnummersArrayAdapter$1.onClick(NoodnummersArrayAdapter.java:57)
        at android.view.View.performClick(View.java:4204)
        at android.view.View$PerformClick.run(View.java:17355)
        at android.os.Handler.handleCallback(Handler.java:725)
        at android.os.Handler.dispatchMessage(Handler.java:92)
        at android.os.Looper.loop(Looper.java:137)
        at android.app.ActivityThread.main(ActivityThread.java:5041)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:511)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
        at dalvik.system.NativeStart.main(Native Method)
NoodNummerActivity

ListView listView = (ListView) findViewById(R.id.listViewNoodnummers);
//addList(noodnummersArrayList, listView);
NoodnummersArrayAdapter adapter = new NoodnummersArrayAdapter(getBaseContext(), R.layout.noodnummers_list, noodnummersArrayList);

// fill the listview with adapter.
listView.setAdapter(adapter);

setListViewHeightBasedOnChildren(listView);
“从不”使用getBaseContext()

尝试使用
NoodNummerActivity。此

NoodnummersArrayAdapter adapter = new NoodnummersArrayAdapter(NoodnummersActivity.this, R.layout.noodnummers_list, noodnummersArrayList);
然后试着用

new AlertDialog.Builder(context)

顺便说一下,我建议在活动开始时使用上下文定义一个私有字段。我在这里的某个地方找到了这个建议,我觉得它很棒:

public class MyActivity extends Activity {
    private Context context = MyActivity.this;
}

通过这种方式,您可以毫无顾虑地使用“上下文”。

将此方法用于上下文:

private Context getDialogContext() {
        Context context;
        if (getParent() != null)
            context = getParent();
        else
            context = this;
        return context;
    }

试试这个,它会起作用。

可能他已经这样做了,因为他正在使用点火器的上下文。你不需要这样做,因为构造函数中传递的上下文可以通过getContext()Hm获得,你是对的。顺便说一句,它崩溃了,真奇怪。这里需要Logcat。如果他使用应用程序上下文创建适配器,这可能是问题的原因。我已经尝试过了。但是当我做这个新的AlertDialog.Builder(noodNumberActivity.this)时。它在抱怨…NoodNummerActivity不是一个封闭类“