是否可以在警报对话框中创建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
答案 0 :(得分:1)
您正在呼叫g.setNumColumns(Length)
,但此时g
为null
。因此,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)。以避免对话框的标题。
希望这会对你有所帮助。