Сбой Spinner ArrayAdapter с пользовательским макетом - PullRequest
0 голосов
/ 11 марта 2011

Я пытаюсь поэкспериментировать с пользовательским Spinner / ArrayAdapter. Вот мой код:

    myspinner=(Spinner)findViewById(R.id.myspinner);
    myadapter=new ArrayAdapter<String>(this,R.layout.mytextview,R.id.mytv,sample_data);
    myadapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    myspinner.setOnItemSelectedListener(this);
    myspinner.setAdapter(myadapter);

Ниже приведен пользовательский макет mytextview, содержащий mytv:

<?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:id="@+id/mylayout" android:layout_width="match_parent" android:layout_height="wrap_content">
        <View android:layout_width="match_parent" android:layout_height="15dip" android:id="@+id/myview1" android:background="@color/bordertop"></View>
        <TextView android:layout_height="wrap_content" android:layout_width="wrap_content" android:textSize="30dip" android:id="@+id/mytv"></TextView>
        <View android:layout_width="match_parent" android:layout_height="15dip" android:id="@+id/myview2" android:background="@color/borderbottom"></View>
    </LinearLayout>

Когда я нажимаю спиннер, чтобы вызвать всплывающее окно, Android вылетает. Пришедшая логика прекрасно работает, когда я закомментирую метод setDropDownViewResource. Я до сих пор не понимаю, какое представление setDropDownViewResource на самом деле устанавливает. Может кто-нибудь показать мне, как это выглядит по умолчанию. И если кто-то хочет переопределить его с помощью пользовательского макета - должен ли макет иметь определенную структуру?

1 Ответ

1 голос
/ 09 июня 2011

вот то, что я обычно использовал для прядильщиков:

Spinner distancespinner = (Spinner) findViewById(R.id.distance);
ArrayAdapter<CharSequence> distanceadapter = ArrayAdapter.createFromResource(
    this, R.array.distance, android.R.layout.simple_spinner_item);
distanceadapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
distancespinner.setAdapter(distanceadapter);
distancespinner.setOnItemSelectedListener(new distanceSelector());

(очевидно, замените расстояние на то, что вы хотите)

<Spinner
    android:id="@+id/distance"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:prompt="@string/app_name"
    />

мне кажется, ваша проблема в этомстрока:

myadapter=new ArrayAdapter<String>(this,R.layout.mytextview,R.id.mytv,sample_data);

но тогда я не знаю, ваш ArrayAdapter основан вместо того, как у меня есть и согласно Spinner"ссылки на android.R.layout.simple_spinner_item IDмакет для стандартного внешнего вида счетчика, определенный платформой. Затем вызывается setDropDownViewResource (int) для определения внешнего вида для каждого элемента при открытии виджета (simple_spinner_dropdown_item - это другой стандартный макет, определенный платформой). "

Я думаю, если вы хотите настроить свой счетчик, .setDropDownViewResource(); - это то, где это сделать.

...