【问题标题】:Spinner ArrayAdapter crashing with custom layoutSpinner ArrayAdapter 因自定义布局而崩溃
【发布时间】:2011-06-10 03:28:00
【问题描述】:

我正在尝试使用自定义 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 实际设置的视图。谁能告诉我默认情况下它的样子。而且,如果想用自定义布局覆盖它 - 布局是否需要具有特定结构?

【问题讨论】:

    标签: android spinner adapter


    【解决方案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(); 是做它的地方。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-22
      • 2013-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多