当我长按GridView中的某个项目时,我正在尝试显示一个Dialog。我试过这个,但它错了。我真的不明白如何使用OnItemLongClickListener以及为什么它返回一个布尔值。有人可以帮我理解这一点,并弄清楚如何显示这个对话框。
gridView.setOnItemLongClickListener(new OnItemLongClickListener() {
public boolean onItemLongClick(AdapterView<?> parent, View v,
int position, long id) {
FavoriteViewDialog dialog =
new FavoriteViewDialog(FavoriteView.this, null, null);
dialog.show();
return true;
}
});
谢谢。
它抛出的错误是......
Thread [<1> main] (Suspended (exception WindowManager$BadTokenException))
FavoriteViewDialog(Dialog).show() line: 245
FavoriteView$2.onItemLongClick(AdapterView, View, int, long) line: 39
GridView(AbsListView).performLongPress(View, int, long) line: 1753
AbsListView.access$600(AbsListView, View, int, long) line: 72
AbsListView$CheckForLongPress.run() line: 1711
ViewRoot(Handler).handleCallback(Message) line: 587
ViewRoot(Handler).dispatchMessage(Message) line: 92
Looper.loop() line: 123
ActivityThread.main(String[]) line: 4627
Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method]
Method.invoke(Object, Object...) line: 521
ZygoteInit$MethodAndArgsCaller.run() line: 868
ZygoteInit.main(String[]) line: 626
NativeStart.main(String[]) line: not available [native method]
答案 0 :(得分:0)
尝试使用Activity的showDialog(int i)方法来显示对话框:http://developer.android.com/guide/topics/ui/dialogs.html
定义onCreateDialog(int)和onPrepareDialog(int,Dialog)回调方法的最佳方法是使用switch语句检查传入方法的id参数...
static final int DIALOG_PAUSED_ID = 0;
static final int DIALOG_GAMEOVER_ID = 1;
然后,使用每个ID的switch case定义onCreateDialog(int)回调:
protected Dialog onCreateDialog(int id) {
Dialog dialog;
switch(id) {
case DIALOG_PAUSED_ID:
// do the work to define the pause Dialog
break;
case DIALOG_GAMEOVER_ID:
// do the work to define the game over Dialog
break;
default:
dialog = null;
}
return dialog;
}
注意:在此示例中,case语句中没有代码,因为定义Dialog的过程超出了本节的范围。请参阅下面有关创建AlertDialog的部分,提供适用于此示例的代码。
然后拨打showDialog(DIALOG_PAUSED_ID); //or another int representing a Dialog.
答案 1 :(得分:0)
通常,WindowManager $ BadTokenException与上下文相关。
通常,当您使用一个上下文在另一个上下文中显示对话框时会抛出它。
通常可以通过在对话框中使用getApplicationContext而不是SomeActivity来避免这种情况。这是