Question

I have a spinner with a custom adapter displaying objects from a database. When the object list changed I create a new adapter with the List and apply it on the spinner. Afterwards the first item is selected, so I tried this:

// 5th item selected
int pos = spinner.getSelectedItemPosition();
spinner.setAdapter(newAdapter);
// 0th item selected
spinner.setSelectedItem(pos);
// 5th item is selected

But the GUI does still show the first item?

spinner.invalidate() did not help.

Is this the correct way to achieve what I want? I really could not find any information on this behavior.

Was it helpful?

Solution

Solved: I guess the main problem was the custom spinner adapter. This works fine now

if (spinner.getCount() > 0) {
    pos = spinner.getSelectedItemPosition();
}
MySpinnerAdapter adapter = new MySpinnerAdapter(context, myNewObjects);
spinner.setAdapter(adapter);
spinner.setSelection(pos); // needed
adapter.notifyDataSetChanged();

OTHER TIPS

spinner.setOnItemSelectedListener(new OnItemSelectedListener() {

        @Override
        public void onItemSelected(AdapterView<?> arg0, View arg1,
                int arg2, long arg3) {

            spinner.setSelectedItem(5);
        }

        @Override
        public void onNothingSelected(AdapterView<?> arg0) {
            // TODO Auto-generated method stub

        }
    });

Did u tried notifydatasetChanged() or notifydatasetInvalidate() method of adapter.

newAdapter.notifydatasetChanged()
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top