miosz
miosz

Reputation: 163

How to programmatically change the selected item and modify a view?

I have small problem.

I'm using Spinner in android. For example spinner contain 4 string items: Item1, Item2, Item3, Item4. Spinner is set by for example Item3. Now i wanna to programmatically change selected item to Item2 and change font color to red. So i did:

_spinner.setSelection(1);
View view = _spinner.getSelectedView();
if(view instanceof TextView)
{
    // change color
}

But it didn't work. It's because when i get selectedView, Item3 is still selected so i change color on Item3 view. How to fix it?

Upvotes: 1

Views: 524

Answers (2)

Manish Gupta
Manish Gupta

Reputation: 139

Try setting adapter like this :

final ArrayAdapter<String> adapter = new ArrayAdapter<String>(
            this, android.R.layout.simple_spinner_item, list) {
        @Override
        public View getDropDownView(int position, View convertView,
                                    ViewGroup parent) {
            View view = super.getDropDownView(position, convertView, parent);
            TextView tv = (TextView) view;

            if (position == 0)
                tv.setTextColor(ContextCompat.getColor(Activity.this, android.R.color.darker_gray));
            else
                tv.setTextColor(ContextCompat.getColor(Activity.this, android.R.color.black));

            return view;
        }
    };
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinner.setAdapter(adapter );
    spinner.setSelection(Adapter.getPosition(Item2));

This way you can easily set different color for Item1,Item2 or Item3 and item2 will be dynamically set on spinner.

Upvotes: 1

AskNilesh
AskNilesh

Reputation: 69689

Try this

spinner= findViewById(R.id.spinner);


        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {

                ((TextView) adapterView.getChildAt(0)).setTextColor(getResources().getColor(R.color.black));
                ((TextView) adapterView.getChildAt(0)).setTextSize(19);            }

            @Override
            public void onNothingSelected(AdapterView<?> adapterView) {

            }
        });

Upvotes: 2

Related Questions