やあ警告ダイアログを作成しようとしましたが、アプリケーションを実行すると例外がスローされます
09-26 12:43:21.949: E/AndroidRuntime(14618): FATAL EXCEPTION: main
09-26 12:43:21.949: E/AndroidRuntime(14618): Android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
09-26 12:43:21.949: E/AndroidRuntime(14618): at Android.view.ViewRootImpl.setView(ViewRootImpl.Java:687)
09-26 12:43:21.949: E/AndroidRuntime(14618): at Android.view.WindowManagerImpl.addView(WindowManagerImpl.Java:301)
09-26 12:43:21.949: E/AndroidRuntime(14618): at Android.view.WindowManagerImpl.addView(WindowManagerImpl.Java:215)
09-26 12:43:21.949: E/AndroidRuntime(14618): at Android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.Java:140)
09-26 12:43:21.949: E/AndroidRuntime(14618): at Android.app.Dialog.show(Dialog.Java:278)
09-26 12:43:21.949: E/AndroidRuntime(14618): at com.example.stampp.UI.Rewards.DeleteRewardsFragment$1.onItemClick(DeleteRewardsFragment.Java:80)
09-26 12:43:21.949: E/AndroidRuntime(14618): at Android.widget.AdapterView.performItemClick(AdapterView.Java:292)
09-26 12:43:21.949: E/AndroidRuntime(14618): at Android.widget.AbsListView.performItemClick(AbsListView.Java:1394)
09-26 12:43:21.949: E/AndroidRuntime(14618): at Android.widget.AbsListView$PerformClick.run(AbsListView.Java:3024)
09-26 12:43:21.949: E/AndroidRuntime(14618): at Android.widget.AbsListView.onTouchEvent(AbsListView.Java:3846)
09-26 12:43:21.949: E/AndroidRuntime(14618): at Android.view.View.dispatchTouchEvent(View.Java:5629)
09-26 12:43:21.949: E/AndroidRuntime(14618): at Android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.Java:1964)
09-26 12:43:21.949: E/AndroidRuntime(14618): at Android.view.ViewGroup.dispatchTouchEvent(ViewGroup.Java:1725)
09-26 12:43:21.949: E/AndroidRuntime(14618): at Android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.Java:1970)
09-26 12:43:21.949: E/AndroidRuntime(14618): at Android.view.ViewGroup.dispatchTouchEvent(ViewGroup.Java:1739)
09-26 12:43:21.949: E/AndroidRuntime(14618): at Android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.Java:1970)
09-26 12:43:21.949: E/AndroidRuntime(14618): at Android.view.ViewGroup.dispatchTouchEvent(ViewGroup.Java:1739)
09-26 12:43:21.949: E/AndroidRuntime(14618): at Android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.Java:1970)
09-26 12:43:21.949: E/AndroidRuntime(14618): at Android.view.ViewGroup.dispatchTouchEvent(ViewGroup.Java:1739)
09-26 12:43:21.949: E/AndroidRuntime(14618): at Android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.Java:1970)
09-26 12:43:21.949: E/AndroidRuntime(14618): at Android.view.ViewGroup.dispatchTouchEvent(ViewGroup.Java:1739)
09-26 12:43:21.949: E/AndroidRuntime(14618): at Android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.Java:1970)
09-26 12:43:21.949: E/AndroidRuntime(14618): at Android.view.ViewGroup.dispatchTouchEvent(ViewGroup.Java:1739)
09-26 12:43:21.949: E/AndroidRuntime(14618): at Android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.Java:1970)
09-26 12:43:21.949: E/AndroidRuntime(14618): at Android.view.ViewGroup.dispatchTouchEvent(ViewGroup.Java:1739)
09-26 12:43:21.949: E/AndroidRuntime(14618): at Android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.Java:1970)
09-26 12:43:21.949: E/AndroidRuntime(14618): at Android.view.ViewGroup.dispatchTouchEvent(ViewGroup.Java:1739)
09-26 12:43:21.949: E/AndroidRuntime(14618): at com.Android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.Java:2062)
09-26 12:43:21.949: E/AndroidRuntime(14618): at com.Android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.Java:1400)
09-26 12:43:21.949: E/AndroidRuntime(14618): at Android.app.Activity.dispatchTouchEvent(Activity.Java:2369)
09-26 12:43:21.949: E/AndroidRuntime(14618): at com.Android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.Java:2010)
09-26 12:43:21.949: E/AndroidRuntime(14618): at Android.view.View.dispatchPointerEvent(View.Java:5809)
09-26 12:43:21.949: E/AndroidRuntime(14618): at Android.view.ViewRootImpl.deliverPointerEvent(ViewRootImpl.Java:3130)
09-26 12:43:21.949: E/AndroidRuntime(14618): at Android.view.ViewRootImpl.handleMessage(ViewRootImpl.Java:2658)
09-26 12:43:21.949: E/AndroidRuntime(14618): at Android.view.ViewRootImpl.processInputEvents(ViewRootImpl.Java:1015)
09-26 12:43:21.949: E/AndroidRuntime(14618): at Android.view.ViewRootImpl.handleMessage(ViewRootImpl.Java:2667)
09-26 12:43:21.949: E/AndroidRuntime(14618): at Android.os.Handler.dispatchMessage(Handler.Java:99)
09-26 12:43:21.949: E/AndroidRuntime(14618): at Android.os.Looper.loop(Looper.Java:137)
09-26 12:43:21.949: E/AndroidRuntime(14618): at Android.app.ActivityThread.main(ActivityThread.Java:4517)
09-26 12:43:21.949: E/AndroidRuntime(14618): at Java.lang.reflect.Method.invokeNative(Native Method)
09-26 12:43:21.949: E/AndroidRuntime(14618): at Java.lang.reflect.Method.invoke(Method.Java:511)
09-26 12:43:21.949: E/AndroidRuntime(14618): at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:993)
09-26 12:43:21.949: E/AndroidRuntime(14618): at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:760)
09-26 12:43:21.949: E/AndroidRuntime(14618): at dalvik.system.NativeStart.main(Native Method)
これは私のコードです:
public class DeleteRewardsFragment extends Fragment{
private Context context;
private FragmentsActivity activity;
private ListView listView;
private View myFragmentView;
private DeleteRewardsAdapter adapter;
private String[] values;
@SuppressLint("ResourceAsColor")
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
myFragmentView = inflater.inflate(R.layout.listview, container, false);
listView = (ListView) myFragmentView.findViewById(Android.R.id.list);
activity = (FragmentsActivity) getActivity();
context = activity.getApplicationContext();
values = new String[4];
adapter = new DeleteRewardsAdapter(context, values);
listView.setAdapter(adapter);
listView.setOnItemClickListener(deleteEvent);
return myFragmentView;
}
private OnItemClickListener deleteEvent = new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
AlertDialog.Builder alertDialog = new AlertDialog.Builder(context);
alertDialog .setTitle("Jetzt löschen?");
alertDialog .setMessage("Die in deisem Store gesammelten stampss gehen debei verloren!")
.setCancelable(false)
.setPositiveButton("Abbrechen", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
values = new String[values.length-1];
adapter = new DeleteRewardsAdapter(context, values);
listView.setAdapter(adapter);
}
})
.setNegativeButton("Löschen", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
AlertDialog dialog = alertDialog.create();
dialog.show();
}
};
}
誰かが私を助けることができますか?
AlertDialog
をActivity
またはFragment
に追加するには、コードで実行しているアプリケーションではなく、Activity
のインスタンスを使用する必要があります。次のようにAlertDialog
を作成します。
AlertDialog.Builder alertDialog = new AlertDialog.Builder(getActivity());
そして、それはあなたのためのトリックを行う必要があります! :)
私の場合、次のようなダイアログを作成しようとしていました。
new Dialog(getApplicationContext());
だから私は変更する必要がありました:
new Dialog(MyActivity.this);
そして、それは働き始めました。
以下は、問題を解決するためにできることです。
代わりに
_ context
_
使用する必要があります _ ActivityName.this
_
getApplicationContext()を使用している場合、getApplicationContext()を使用する前に以下のフラグを使用します
dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT)
マニフェストに次のアクセス許可を追加します。
_<uses-permission Android:name="Android.permission.SYSTEM_ALERT_WINDOW" />
_
コンテキストではなく、アクティビティで送信します。
AlertDialog.Builder alertDialog = new AlertDialog.Builder(activity);
私が変更され:
ProgressDialog(getApplicationContext());
に:
ProgressDialog(MainActivity.this);
、
getApplicationContext()
を変更しました
activity.this
それが動作します