2012-02-24 88 views
0

我试过不同的东西,但事情还没有'去'与列表视图崩溃的自定义对话框

我有一个活动。在这种情况下,当我按下菜单中的某个选项时,我需要弹出一个对话框,并在该对话框中输入字符串值的列表视图,以便从字符串数组中取出xml。

我已经删除了一些代码,把它清理干净,但仍然没有运气...

myList.xml

<ListView xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" > 
</ListView> 

在我的主要活动我的自定义对话框

public class Selector extends Dialog { 

String[] testArray; 
protected Selector(Context context) { 
    super(context); 

    ListView lijstje = (ListView) findViewById(R.layout.mylist); 
    testArray = context.getResources().getStringArray(R.array.currencies); 
    Log.d("test",testArray[0]);//wich shows me the 1e string and it's working 
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this.getContext(),android.R.layout.simple_list_item_1, testArray); 
    lijstje.setAdapter(adapter); 

    LayoutInflater li = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View v = li.inflate(R.layout.mylist, null, false); 
    this.setContentView(v); 

} 

} 

我有我的功能

public void showPopup() 
{  
    Selector test = new Selector(this); 
    test.show(); 
} 

当我把lijstje.setAdapter(适配器);在评论我的应用程序不会崩溃,但对话是非常小的,空

02-24 22:14:29.705: D/AndroidRuntime(28734): Shutting down VM 
02-24 22:14:29.705: W/dalvikvm(28734): threadid=1: thread exiting with uncaught exception (group=0x40a4e1f8) 
02-24 22:14:29.715: E/AndroidRuntime(28734): FATAL EXCEPTION: main 
02-24 22:14:29.715: E/AndroidRuntime(28734): java.lang.NullPointerException 
02-24 22:14:29.715: E/AndroidRuntime(28734): at be.veeteedev.OmzetterActivity.showPopup(OmzetterActivity.java:83) 
02-24 22:14:29.715: E/AndroidRuntime(28734): at be.veeteedev.OmzetterActivity.onOptionsItemSelected(OmzetterActivity.java:59) 
02-24 22:14:29.715: E/AndroidRuntime(28734): at android.app.Activity.onMenuItemSelected(Activity.java:2502) 
02-24 22:14:29.715: E/AndroidRuntime(28734): at com.android.internal.policy.impl.PhoneWindow.onMenuItemSelected(PhoneWindow.java:950) 
02-24 22:14:29.715: E/AndroidRuntime(28734): at com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:735) 
02-24 22:14:29.715: E/AndroidRuntime(28734): at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:149) 
02-24 22:14:29.715: E/AndroidRuntime(28734): at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:874) 
02-24 22:14:29.715: E/AndroidRuntime(28734): at com.android.internal.view.menu.ListMenuPresenter.onItemClick(ListMenuPresenter.java:163) 
02-24 22:14:29.715: E/AndroidRuntime(28734): at android.widget.AdapterView.performItemClick(AdapterView.java:292) 
02-24 22:14:29.715: E/AndroidRuntime(28734): at android.widget.AbsListView.performItemClick(AbsListView.java:1058) 
02-24 22:14:29.715: E/AndroidRuntime(28734): at android.widget.AbsListView$PerformClick.run(AbsListView.java:2514) 
02-24 22:14:29.715: E/AndroidRuntime(28734): at android.widget.AbsListView$1.run(AbsListView.java:3168) 
02-24 22:14:29.715: E/AndroidRuntime(28734): at android.os.Handler.handleCallback(Handler.java:605) 
02-24 22:14:29.715: E/AndroidRuntime(28734): at android.os.Handler.dispatchMessage(Handler.java:92) 
02-24 22:14:29.715: E/AndroidRuntime(28734): at android.os.Looper.loop(Looper.java:137) 
02-24 22:14:29.715: E/AndroidRuntime(28734): at android.app.ActivityThread.main(ActivityThread.java:4424) 
02-24 22:14:29.715: E/AndroidRuntime(28734): at java.lang.reflect.Method.invokeNative(Native Method) 
02-24 22:14:29.715: E/AndroidRuntime(28734): at java.lang.reflect.Method.invoke(Method.java:511) 
02-24 22:14:29.715: E/AndroidRuntime(28734): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
02-24 22:14:29.715: E/AndroidRuntime(28734): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
02-24 22:14:29.715: E/AndroidRuntime(28734): at dalvik.system.NativeStart.main(Native Method) 
+0

使用上下文代替this.getContext() – noob 2012-02-24 22:23:40

回答

0

我不知道这会奇迹般地解决所有你的问题,但在你选择的构造有以下分配:

ListView lijstje = (ListView) findViewById(R.layout.mylist); 

请注意您是如何尝试使用布局ID查找视图的。它应该像R.id.mylist这样说。目前它将解析为null,因此NullPointerException

另外,你最后一直在做setContentView(...)。如果您尝试从提及的布局文件(R.layout.mylist)充气视图,请确保在已设置内容视图后执行此操作。顺便说一句,如果你没有对话框显示列表的花哨布局,你可以使用默认的AlertDialog构建器。 Have a read here, samples included。有关自定义对话框的一些帮助,请查看该页面的further down the bottom

0

我猜这是你的问题。调用时这样 lijstje是一个布局而不是视图

还设置内容视图应该是任何事情之前没有什么可以找到

ListView lijstje = (ListView) findViewById(R.layout.mylist); 

lijstje视图是空

public class Selector extends Dialog { 

String[] testArray; 
protected Selector(Context context) { 
    super(context); 
    setContentView(R.layout.list); 

    ListView lijstje = (ListView) findViewById(R.id.mylist); 
    testArray = context.getResources().getStringArray(R.array.currencies); 
    Log.d("test",testArray[0]);//wich shows me the 1e string and it's working 
    ArrayAdapter<String> adapter = new ArrayAdapter<String> (this.getContext(),android.R.layout.simple_list_item_1, testArray); 
    lijstje.setAdapter(adapter); 
} 

mylist.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 

    <ListView 
    android:id="@+id/list" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

</LinearLayout>