Reputation: 2410
I use a Spinner inside a layout. I use this code:
...
<Spinner
android:layout_width="200dp"
android:layout_height="wrap_content"
android:id="@+id/spin_prod_promo" />
...
Now, when I assign it's adapter I use this code:
...
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(mcontext, android.R.layout.simple_spinner_item, mylabels);
// Drop down layout style
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
Spinner myspinner = (Spinner) V.findViewById(R.id.spin_prod_promo);
// attaching data adapter to spinner
myspinner.setAdapter(dataAdapter);
...
My problem is that, the text color of the spinner is white... thus unreadable, and I do not set it to be this way anywhere in the code.
The "funny thing" is that I use the exact same code in a different activity and the Spinner has the right colors. The difference is that in this (BAD) case the spinner is located in a fragment.
I tried using a custom layout for the items of the spinner, but all I succeeded was to make the spinner look disabled. Plus there is always an item in the dropdown that has the color of the background (it can only be seen if I click on it, then I can see the content as long as I keep the click on) What is going on here? How can I solve this problem?
Is there something I can do to set the colors of the spinner to be the colors of the theme? All other widgets in the fragment have normal colors...
Thank you
Upvotes: 4
Views: 11727
Reputation: 1
Just use getBaseContext() instead of mcontext. Worked for me. I set the adapter of spinner inside onItemClick function of AutoCompleteTextView and had the same problem of text color until I used getBaseContext(). Hope this answer helps.
Upvotes: 0
Reputation: 235
I was having this problem too. This is not a solution but a potential workaround for others to try in case the above solutions don't work.
Set the background color of the popup that appears when the spinner is selected to something that contrasts the white text color.
<Spinner
...
android:popupBackground="@color/layout_background"
... />
Here I have defined layout_background as a dark greyish color #565656 in a seperate file called colors.xml located in my src/main/java/res/values folder.
Upvotes: 1
Reputation: 1089
just try this..
String[]array={"A","B","C","D"};
ArrayAdapter<String> adapter=new ArrayAdapter<String> (**YourClassName.this**,android.R.layout.simple_list_item_checked,array);
listView.setAdapter(adapter);
NOTE YourClassName.this
is your current class name.This code is working for me.
Upvotes: 6
Reputation: 2677
Just use null instead of getApplicationContext(). It must work. I have tried it and its working. In your Application you can use null instead of mcontext
Upvotes: 2
Reputation: 2410
Another solution is to indeed use GetApplication()
as the context instead of
getActivity().getApplicationContext();
This way I can use the default item layout without having to declare a new custom layout.
So I guess, CommonsWare was right afterall. It is the context that blew things up. Please @Commonsware, make your comment an answer so I can accept it, because you deserve it.
EDIT
I was writing this while you wrote your answer, that is why it seems I didn't see your answer :)
Upvotes: 0
Reputation: 1007624
Context mcontext = getActivity().getApplicationContext(); Is this wrong?
Yes, this is wrong. Only use getApplicationContext()
when you know exactly why you are using getApplicationContext()
. In particular, never use getApplicationContext()
for inflating layouts, as it will screw things up by not using the right theme.
I would delete mcontext
entirely, replacing it with getActivity()
where needed in your fragment.
Upvotes: 24
Reputation: 2410
I found the solution. It is to declare a custom layout for the item of the Spinner and use it instead of the default one. And in the custom layout, I set the color of the TextView text to black. It works this way. So the code: (promospin_row.xml)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Text"
android:textColor="#000000"
android:id="@+id/tv_promo_txt"
android:paddingLeft="5dp"
android:paddingTop="5dp" />
</LinearLayout>
and the java code:
// Creating adapter for spinner
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(mcontext, R.layout.promospin_row, R.id.tv_promo_txt, mylabels);
// Drop down layout style
dataAdapter.setDropDownViewResource(R.layout.promospin_row);
Spinner myspinner = (Spinner) V.findViewById(R.id.spin_prod_promo);
// attaching data adapter to spinner
myspinner.setAdapter(dataAdapter);
This way, the item text becomes black. And no other anomalies. Thank you @CommonsWare for your time
Upvotes: 2