簡體   English   中英

具有列表視圖的自定義對話框崩潰

[英]Custom Dialog with a listview crashing

我嘗試了不同的方法,但情況仍未“進行”

我有活動。 在這種情況下,當我按下菜單中的一個選項時,我需要彈出一個對話框,然后在該對話框中從字符串數組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(adapter); 在評論中,我的應用程序沒有崩潰,但對話框很小並且為空

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)

我不確定這是否可以神奇地解決您遇到的所有問題,但是在Selector構造函數中,您需要進行以下分配:

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

請注意您如何嘗試查找具有布局ID的視圖。 它應該代替R.id.mylist類的R.id.mylist 目前它將解析為null ,因此為NullPointerException

同樣,您將在最后始終執行setContentView(...) 如果您嘗試從提到的布局文件( R.layout.mylist )擴展視圖,請確保設置內容視圖之后執行此操作。

順便說一句,如果顯示列表的對話框沒有合適的布局,則可以使用默認的AlertDialog構建器就足夠了。 在這里閱讀,包括樣品 有關自定義對話框的一些幫助,請同一頁面的底部進一步查看。

我猜這是你的問題。 沒有什么可以找到的觀點

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

以這種方式調用時,lijstje為null 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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM