Spinner 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 работи добре.

Всяка помощ се оценява.

екранна снимка


person GAMA    schedule 19.03.2013    source източник
comment
защо пускаш въпрос втори път?   -  person Hardik Joshi    schedule 19.03.2013
comment
Изтрих това, тъй като не беше съвсем ясно и не беше добре форматирано.   -  person GAMA    schedule 19.03.2013
comment
Защо използвате радио бутона в спинера? Spinner избира една селекция наведнъж, не се нуждаете от бутона за избор. Можете да изберете само един елемент от Spinner, когато използвате Spinner.   -  person Sulabh Gajjar    schedule 19.03.2013
comment
Знам това. Но това е едно от изискванията за проектиране.   -  person GAMA    schedule 19.03.2013
comment
@GAMA Намерихте ли решението? Аз също съм заседнал със същия проблем.   -  person Ali_Waris    schedule 14.11.2017


Отговори (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>

и опитайте

person almuneef    schedule 19.03.2013
comment
В обобщение, задайте всички елементи в персонализираното оформление като clickable="false". Това работи страхотно! - person nderjung; 30.07.2014

Опитахте ли да зададете слушател на вашия RadioButton с персонализиран ArrayAdapter?

person Damien R.    schedule 19.03.2013
comment
имаш предвид setOnCheckedChangeListener? - person GAMA; 19.03.2013
comment
Мисля, че setOnClickListenerби било по-добре, тъй като вашите радиобутони не са в радиогрупа, не съм сигурен, че setOnCheckedChangeListenerби работило, но можете да опитате. В потребителски arrayadapter нещо като view.findViewById(R.id.radio); - person Damien R.; 19.03.2013

Мисля, че това може да свърши работа

След като инициализирате спинера на вашия onCreate.

yourspinner.setOnItemSelectedListener(this);
person nDCasT    schedule 05.04.2016