我想知道我的代碼出了什麼問題,或者我的代碼中缺少什麼。這是我的場景:爲什麼這個alertView不會生成並導致應用程序崩潰?
我有一個ListView和一個CustomAdapter從其BaseAdapter派生的數據。
我已經爲每個項目定製了一個視圖。
在這個自定義視圖(又名單元格)中,我已經應用了longClickListener。長時間按下單元格後,長按方法被成功調用。到這裏沒問題。
但是現在我添加了用於在此方法中生成AlertDialog的代碼,AlterDialog將永遠不會生成並崩潰整個應用程序。
我試圖在現在保存alertDialog生成的類的外部創建另一個方法。然後我從longClickListener的接口方法調用這個外部方法。但仍然是同樣的崩潰。
然後我嘗試通過Runnable創建整個alertDialog,並在1秒後通過處理程序啓動Runnable,但alertDialog永遠不會生成並導致應用程序崩潰。
以下是代碼至今:
void called()
{
Handler h = new Handler();
Runnable r = new Runnable(){
@Override
public void run()
{
Log.d("mx", "about to run!");
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(FolderCell.this.getContext());
alertDialogBuilder
.setTitle("title")
.setMessage("message")
.setCancelable(false)
.setNegativeButton("OK",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int id) {
dialog.cancel();
}
});
AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.show();
}
};
h.postDelayed(r, 1000);
}
@Override
public boolean onLongClick(View arg0) {
// TODO Auto-generated method stub
Log.d("mx", "Long clicked!");
this.called();
return true;
}
崩潰日誌:
08-23 23:40:39.734: E/AndroidRuntime(32390): FATAL EXCEPTION: main
08-23 23:40:39.734: E/AndroidRuntime(32390): android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
08-23 23:40:39.734: E/AndroidRuntime(32390): at android.view.ViewRootImpl.setView(ViewRootImpl.java:589)
08-23 23:40:39.734: E/AndroidRuntime(32390): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:326)
08-23 23:40:39.734: E/AndroidRuntime(32390): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:224)
08-23 23:40:39.734: E/AndroidRuntime(32390): at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:149)
08-23 23:40:39.734: E/AndroidRuntime(32390): at android.app.Dialog.show(Dialog.java:277)
08-23 23:40:39.734: E/AndroidRuntime(32390): at com.rdmteq.pic_measure.FolderCell$2.run(FolderCell.java:216)
08-23 23:40:39.734: E/AndroidRuntime(32390): at android.os.Handler.handleCallback(Handler.java:615)
08-23 23:40:39.734: E/AndroidRuntime(32390): at android.os.Handler.dispatchMessage(Handler.java:92)
08-23 23:40:39.734: E/AndroidRuntime(32390): at android.os.Looper.loop(Looper.java:137)
08-23 23:40:39.734: E/AndroidRuntime(32390): at android.app.ActivityThread.main(ActivityThread.java:4794)
08-23 23:40:39.734: E/AndroidRuntime(32390): at java.lang.reflect.Method.invokeNative(Native Method)
08-23 23:40:39.734: E/AndroidRuntime(32390): at java.lang.reflect.Method.invoke(Method.java:511)
08-23 23:40:39.734: E/AndroidRuntime(32390): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
08-23 23:40:39.734: E/AndroidRuntime(32390): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)
08-23 23:40:39.734: E/AndroidRuntime(32390): at dalvik.system.NativeStart.main(Native Method)
附加信息上,其中FolderCell是在層次結構
MainActivity (Activity Class)
|
contains--> ListView (ListView Class)
|
--> CustomAdapter (BaseAdapter Class) and set to ListView
|
contains-> FolderCell (RelativeLayout Class) generated in getView(..)
誰能幫我這個 ?
確保你逝去的當前運行的活動上下文AlertDialog.Builder'構造函數 –
我試着通過傳遞一個引用直到單元格傳遞上下文,並且我也嘗試傳遞單元格的上下文,但是仍然崩潰... – CodenameLambda1