Spinner ArrayAdapter与自定义布局崩溃

时间:2011-03-11 00:52:05

标签: android spinner adapter

我正在尝试使用自定义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);

以下是包含mytv的自定义布局mytextview:

<?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 个答案:

答案 0 :(得分:1)

这是我通常用于纺纱厂的东西:

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();就是在哪里做的。