0

是否可以在警报对话框中创建 GridView?

目前我有一个单词搜索,我想在弹出对话框中显示解决方案(完成的单词搜索),以便用户可以在他们的谜题和答案之间快速切换。

我试过像这样实现它

AlertDialog.Builder aBuilder = new AlertDialog.Builder(this);

 // set title
 aBuilder.setTitle("The solution");
    GridView g = null ;
    final ArrayAdapter<String> Wordadapter = new ArrayAdapter<String>(getApplicationContext(),
            R.layout.wordsstyle, WordsToFind);
    g.setNumColumns(Length);
    g.setAdapter(Wordadapter);
     aBuilder.setView(g);
 aBuilder.setPositiveButton("OK", new DialogInterface.OnClickListener()
 {
 public void onClick(DialogInterface dialog, int whichButton)
 {
 }
});

然而它只是崩溃

我在我的日志猫里得到了这个

04-24 21:17:48.472: E/AndroidRuntime(826): FATAL EXCEPTION: main
04-24 21:17:48.472: E/AndroidRuntime(826): java.lang.IllegalStateException: Could not     execute method of the activity
04-24 21:17:48.472: E/AndroidRuntime(826):  at     android.view.View$1.onClick(View.java:3591)
04-24 21:17:48.472: E/AndroidRuntime(826):  at android.view.View.performClick(View.java:4084)
04-24 21:17:48.472: E/AndroidRuntime(826):  at android.view.View$PerformClick.run(View.java:16966)
04-24 21:17:48.472: E/AndroidRuntime(826):  at android.os.Handler.handleCallback(Handler.java:615)
04-24 21:17:48.472: E/AndroidRuntime(826):  at android.os.Handler.dispatchMessage(Handler.java:92)
04-24 21:17:48.472: E/AndroidRuntime(826):  at android.os.Looper.loop(Looper.java:137)
04-24 21:17:48.472: E/AndroidRuntime(826):  at     android.app.ActivityThread.main(ActivityThread.java:4745)
04-24 21:17:48.472: E/AndroidRuntime(826):  at java.lang.reflect.Method.invokeNative(Native Method)
04-24 21:17:48.472: E/AndroidRuntime(826):  at java.lang.reflect.Method.invoke(Method.java:511)
04-24 21:17:48.472: E/AndroidRuntime(826):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
04-24 21:17:48.472: E/AndroidRuntime(826):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
04-24 21:17:48.472: E/AndroidRuntime(826):  at dalvik.system.NativeStart.main(Native Method)
04-24 21:17:48.472: E/AndroidRuntime(826): Caused by: java.lang.reflect.InvocationTargetException
04-24 21:17:48.472: E/AndroidRuntime(826):  at java.lang.reflect.Method.invokeNative(Native Method)
04-24 21:17:48.472: E/AndroidRuntime(826):  at java.lang.reflect.Method.invoke(Method.java:511)
04-24 21:17:48.472: E/AndroidRuntime(826):  at android.view.View$1.onClick(View.java:3586)
04-24 21:17:48.472: E/AndroidRuntime(826):  ... 11 more
04-24 21:17:48.472: E/AndroidRuntime(826): Caused by: java.lang.NullPointerException
04-24 21:17:48.472: E/AndroidRuntime(826):  at com.example.angrywordsearch.Puzzle_Activity.GridPopup(Puzzle_Activity.java:726)
04-24 21:17:48.472: E/AndroidRuntime(826):  at com.example.angrywordsearch.Puzzle_Activity.ViewSolution_Click(Puzzle_Activity.java:686)
04-24 21:17:48.472: E/AndroidRuntime(826):  ... 14 more
4

5 回答 5

1

您可以启动一个使用 DialogTheme 的 ActivityForResult 将自己显示为对话框。

http://developer.android.com/guide/topics/ui/themes.html

例子: <activity android:theme="@android:style/Theme.Dialog">

从那里,您可以使用 Activity 的 setResult(int) 方法从网格中返回选定的结果。

希望能帮助到你。

于 2013-04-24T21:27:36.453 回答
1

一个更好的方法来做到这一点并更好地控制实际布局是通过创建一个对话框并扩展一个包含 gridview 的自定义 XML。xml 本身就像任何其他布局一样只是一个 xml,唯一的区别是当我们对其进行膨胀时,它只会填充我们的对话框,而不是像普通的根布局那样填充整个屏幕。

所以首先我们创建对话框:

//create the dialog
final Dialog dialog = new Dialog(getBaseContext());

//remove the default title if you want to
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);

//here is where we inflate our custom xml containing a gridview
dialog.setContentView(R.layout.grid_dialog);

现在我们有了引用自定义 xml 的对话框对象,假设在该 XML 中我们有一个名为“my_grid”的网格视图,我们现在可以通过我们的对话框对象引用它,如下所示:

Gridview myGrid = (Gridview) dialog.findViewById(R.id.my_grid);

现在您有了对 gridview 的引用,您可以执行通常对 gridview 执行的任何操作,例如设置自定义适配器。

对于您想要引用的任何其他布局对象,例如文本视图或按钮,只需以相同的方式进行即可。

如果您想设置对话框的确切大小,只需设置最外层父级的宽度和高度,对话框就会扩展到该大小。

于 2013-04-25T06:02:33.230 回答
1

你在打电话g.setNumColumns(Length),但gnull那个时候。因此NullPointerException在您的 LogCat 中。您需要以GridView某种方式初始化GridView g = new GridView(this);.

于 2013-04-24T21:24:46.630 回答
0

必须是网格视图?...因为您可以将项目数组添加到警报对话框中,类似于列表视图...检查一下:

final CharSequence[] items = {"Foo", "Bar", "Baz"};
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Make your selection");
builder.setItems(items, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
     // Do something with the selection
}
});
AlertDialog alert = builder.create();
alert.show();
于 2013-04-24T21:26:36.457 回答
0

简单的方法是在您的活动中进行任何类型的 Gridview 设计。如果您想将该活动显示为对话框,则只需android:theme="@android:style/Theme.Dialog"像往常一样在 Android 清单文件中设置该活动的主题,使用 startActivity 来调用您的网格视图。然后它将以对话框形式打开。(可能看起来像自定义对话框)。同时在 setcontent 视图使用 (Window.nofeatureDialog) 之前。避免对话框的标题。

希望这会帮助你。

于 2013-04-25T06:20:21.523 回答