2013-04-24 140 views
0

是否可以在警报对话框中创建一个GridView?是否可以在Alertdialog中创建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) 
{ 
} 
}); 

实现它不过它只是崩溃

IM在我的日志猫获得这虽然

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 

回答

1

你打电话g.setNumColumns(Length),但g在那一刻是null。因此您的LogCat中的NullPointerException。您需要以某种方式初始化GridView,可能是GridView g = new GridView(this);。 ?

0

一定是一个gridview ...因为你C和添加项目阵列成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(); 
+0

gridview是做一个wordsearch,因为这是我在我的实际游戏中做的,使得解决方案看起来有点多余 – 2013-04-24 21:28:19

1

你可以启动使用的ActivityForResult DialogTheme显示为一个对话框。

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

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

从那里,你可以从活动的的setResult(int)方法电网返回选定结果。

希望它有帮助。

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说,我们有一个名为GridView的“my_grid”我们现在可以通过引用它我们的对话对象是这样的:

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

现在,你有你的GridView的参考,你可以做任何事情,你通常会做一个GridView这样的设置自定义适配器。

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

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

0

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

希望这会帮助你。