Пользовательский диалог со сбоем просмотра списка - PullRequest
0 голосов
/ 25 февраля 2012

Я пробовал разные вещи, но все еще не "идет"

У меня есть активность. При этом, когда я нажимаю одну из опций в меню, мне нужно открыть диалоговое окно и в этом диалоге список значений строк, которые я получаю из строковых массивов 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)

Ответы [ 2 ]

0 голосов
/ 25 февраля 2012

Полагаю, это ваша проблема.Нет ничего, чтобы найти представление по

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

lijstje равно нулю, когда вызывается таким образом 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>
0 голосов
/ 25 февраля 2012

Я не уверен, что это волшебным образом решит все ваши проблемы, но в конструкторе Selector у вас есть следующее назначение:

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

Обратите внимание, как вы пытаетесь найти представление с макетомЯ бы.Он должен сказать что-то вроде R.id.mylist вместо.В настоящее время он разрешается до null, следовательно, NullPointerException.

Кроме того, вы делаете setContentView(...) полностью в конце.Если вы пытаетесь раздувать представления из упомянутого файла макета (R.layout.mylist), убедитесь, что вы делаете это после того, как настроил представление содержимого.

Кстати, если вы неУ вас нет причудливой компоновки для диалогового окна, отображающего список, вы, вероятно, можете подойти со стандартным компоновщиком AlertDialog. Прочитайте здесь, образцы включены .Для получения справки по пользовательским диалогам посмотрите внизу этой же страницы.

...