2013-03-19 77 views
2

我試圖使用自定義行佈局微調如下:微調OnItemSelected不與自定義行佈局工作

String[] countryArr={"USA","Canada","Other"}; 
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,R.layout.row, R.id.text, countryArr); 
spinnerCountry.setAdapter(adapter); 

row.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:background="#fff" 
    android:orientation="horizontal" 
    android:paddingBottom="10dp" 
    android:paddingLeft="20dp" 
    android:paddingTop="10dp" > 

    <TextView 
     android:id="@+id/text" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textColor="@color/BLACK" 
     android:textSize="26dp" /> 

    <RadioButton 
     android:id="@+id/radio" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" /> 

</RelativeLayout> 

和java代碼:

spinnerCountry.setOnItemSelectedListener(new MyOnItemSelectedListener()); 

public class MyOnItemSelectedListener implements OnItemSelectedListener { 

    public void onItemSelected(AdapterView<?> parent, View view, int pos, 
      long id) { 
     selected = parent.getItemAtPosition(pos).toString().trim(); 
     Log.i("MyOnItemSelectedListener","selected ="+selected); 

     } 
    @SuppressWarnings("rawtypes") 
    public void onNothingSelected(AdapterView parent) { 
     etCountry.setText(""); 
    Log.i("MyOnItemSelectedListener","nothing selected"); 
    } 
} 

當我啓動應用程序時,我在日誌中得到這個:"selected =Other",因爲它是默認值。

但是,當我單擊微調框時,出現如下所示的屏幕,onItemSelected不起作用,因此總是顯示警告框,允許選擇所有3個值但不執行任何操作。

main.xml中

<com.Mypackage.MySpinner 
        android:id="@+id/SpinnerCountry1" 
        android:layout_width="45dp" 
        android:layout_height="59dp" 
        android:layout_marginLeft="160dp" 
        android:background="@drawable/selector_slim_spinner" 
        android:clickable="true" 
        android:entries="@array/blankarray" /> 

public class MySpinner extends Spinner { 

    private Context _context; 

    public MySpinner(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     _context = context; 
    } 

    public MySpinner(Context context) { 
     super(context); 
     _context = context; 
    } 

    public MySpinner(Context context, AttributeSet attrs, int defStyle) { 
     super(context); 
     _context = context; 
    } 

    @Override 
    public View getChildAt(int index) { 
     View v = new View(_context); 
     return v; 
    } 

} 

請注意,如果我不爲微調使用自定義行佈局,OnItemSelected工作正常。

任何幫助表示讚賞。

screenshot

+0

爲什麼第二次發佈問題? – 2013-03-19 10:39:24

+0

我刪除了,因爲它不是很清楚,格式不正確。 – GAMA 2013-03-19 10:40:25

+0

爲什麼在微調器中使用單選按鈕?微調器一次選擇一個選項,您不需要單選按鈕,當您使用微調器時,您只能選擇一個項目fron微調器。 – 2013-03-19 12:27:36

回答

0

你有沒有試圖建立一個監聽你的單選按鈕有一個自定義的ArrayAdapter?

+0

你的意思是'setOnCheckedChangeListener'? – GAMA 2013-03-19 10:49:12

+0

我認爲'setOnClickListener'會更好,因爲你的單選按鈕不在radiogroup中,我不確定'setOnCheckedChangeListener'能工作,但你可以試試。 自定義arrayadapter類似於 'view.findViewById(R.id.radio);' – 2013-03-19 10:52:28

2

您row.xml更改爲

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:background="#fff" 
    android:orientation="horizontal" 
    android:paddingBottom="10dp" 
    android:paddingLeft="20dp" 
    android:paddingTop="10dp" > 

<TextView 
    android:id="@+id/text" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textColor="@color/BLACK" 
    android:textSize="26dp" 
    android:clickable="false" 
    android:focusable="false" 
    android:focusableInTouchMode="false" /> 

<RadioButton 
    android:id="@+id/radio" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentRight="true" 
    android:clickable="false" 
    android:focusable="false" 
    android:focusableInTouchMode="false"/> 

</RelativeLayout> 

,並嘗試

+0

總之,將自定義佈局中的所有元素設置爲'clickable =「false」'。這是一種享受! – escproxy 2014-07-29 22:52:46

0

我想,當你初始化您的onCreate微調,這可能已經做了工作

yourspinner.setOnItemSelectedListener(this);