是否可以在Alertdialog中创建GridView?

时间:2013-04-24 21:19:19

标签: java android gridview

是否可以在警报对话框中创建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

5 个答案:

答案 0 :(得分:1)

您正在呼叫g.setNumColumns(Length),但此时gnull。因此,LogCat中的NullPointerException。您需要以某种方式初始化GridView,可能是GridView g = new GridView(this);

答案 1 :(得分:1)

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

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

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

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

希望它有所帮助。

答案 2 :(得分: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,我们现在可以通过这样的对话框对象引用它:

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

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

对于您想要引用的任何其他布局对象,例如textview或按钮,只需按照相同的方式进行操作即可。

如果要设置对话框的确切大小,只需设置最外层父级的宽度和高度,对话框将扩展为该大小。

答案 3 :(得分:0)

必须要成为gridview?...因为你可以将一个items数组添加到一个alertdialog中,就像listview一样......看看这个:

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();

答案 4 :(得分:0)

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

希望这会对你有所帮助。