2

我正在尝试为微调器使用自定义行布局,如下所示:

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

行.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 个值但不执行任何操作。

主要的.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可以正常工作。

任何帮助表示赞赏。

截屏

4

3 回答 3

3

将您的 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>

并尝试

于 2013-03-19T10:53:43.113 回答
0

您是否尝试使用自定义 ArrayAdapter 在 RadioButton 上设置侦听器?

于 2013-03-19T10:43:14.767 回答
0

我想,这可能已经完成了工作

在 onCreate 上初始化微调器后。

yourspinner.setOnItemSelectedListener(this);
于 2016-04-05T04:19:29.147 回答