Lucifero123
Lucifero123

Reputation: 31

Basic Spinner misbehavior

I have a simple layout (two TextViews and one Spinner), the array and the MainActivity.java which in the onCreate method, through an adapter populates the Spinner.

When I execute the app I can click on the Spinner but nothing happens in android 4.3(API level 16) and a empty, white row is displayed in android2.3.3(Api level 10). Shouldn't I at least see and select one of the strings?

main.xml:

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <TextView
        android:id="@+id/question"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:text="@string/question" />

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/question"
        android:text="@string/one" />

   <Spinner
       android:id="@+id/nationalities_spinner"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_below="@+id/question"
       android:layout_toRightOf="@+id/textView1"
       android:entries="@array/nationalities_array"
       android:tag="@string/select_string" />

</RelativeLayout>

The array for the Spinner:

<string-array name="nationalities_array">
    <item>Italian</item>
    <item>German</item>
    <item>British</item>
    <item>Dutch</item>
</string-array>

and the MainActivity.java:

    public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);  
        Spinner nationalities_spinner  = (Spinner) findViewById(R.id.nationalities_spinner);
        ArrayAdapter<CharSequence> adapter = new ArrayAdapter<CharSequence>(this, R.array.nationalities_array, android.R.layout.simple_spinner_item); 
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        nationalities_spinner.setAdapter(adapter);
    }

    public void onResume(){
        super.onResume();

    } 

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
}

Upvotes: 2

Views: 163

Answers (1)

user
user

Reputation: 87074

You don't see something in your Spinner because you use an incorrect constructor for the ArrayAdapter which results in an empty ArrayAdapter for your Spinner. You use this ArrayAdapter constructor and provide something different than what it wants(a layout file resource and an id of a TextView from that layout file). Instead you probably want this :

ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.nationalities_array, android.R.layout.simple_spinner_item);

Upvotes: 1

Related Questions