2011-03-11 38 views
0

我想嘗試使用自定義微調/ ArrayAdapter。以下是我的代碼:微調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

這裏是我通常用於紡紗:

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是基於而不是我哈哈ve和根據Spinner「android.R.layout.simple_spinner_item ID引用由平臺定義的標準微調器外觀的佈局。然後setDropDownViewResource(INT)被調用,以確定每個項目的外觀部件打開時(simple_spinner_dropdown_item是由平臺定義的另一個標準配置)。」

我認爲,如果你想自定義您的微調,.setDropDownViewResource();是哪裏來去做吧