Question

I have a custom spinner class, and I'd like to change the selected item text color. As you can see the text is almost unreadable in the virtual device. I can get the list items to be black, as you can see in my code but I'm not sure how to change the selected item color? any ideas?

image

    package com.cbs.iomamobile;

import java.util.ArrayList;

import org.apache.http.message.BasicNameValuePair;

import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.Spinner;
import android.widget.TextView;

public class CustomCreateAssemblyViewAdapter extends BaseAdapter{

    private static ArrayList<ArrayList<String>> partLotNumbersArrayList;
    private static ArrayList<String> partNames;
    private static String selected;
    private LayoutInflater mInflater;

    private Context myContext;

    public CustomCreateAssemblyViewAdapter(Context context, ArrayList<ArrayList<String>> results, ArrayList<String> parts){
        partLotNumbersArrayList = results;
        partNames = parts;
        mInflater = LayoutInflater.from(context);
        myContext = context;
    }
    @Override
    public int getCount() {
        return partLotNumbersArrayList.size();
    }

    @Override
    public Object getItem(int position) {
        return partLotNumbersArrayList.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }



    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        final ViewHolder holder;
        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.view_assembly_parts, null);
            holder = new ViewHolder();
            holder.txtName = (TextView) convertView.findViewById(R.id.partName);
            holder.spinner = (Spinner) convertView.findViewById(R.id.LotNumbers);
            convertView.setTag(holder); 
            holder.txtName.setTextColor(Color.BLACK);

            /*if(!holder.txtName.hasFocus()){
                holder.txtName.setFocusable(true);
                holder.txtName.requestFocus();
            }
            if(!holder.spinner.hasFocus()){
                holder.spinner.setFocusable(true);
                holder.spinner.requestFocus();
            }*/
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        holder.txtName.setText(partNames.get(position));        

        //this is needed to set the text color of the dropdown items, else the text is unreadable.
        ArrayAdapter<String> adp1=new ArrayAdapter<String>(myContext, android.R.layout.simple_list_item_1, partLotNumbersArrayList.get(position)){
            @Override
            public View getDropDownView(int position, View convertView,android.view.ViewGroup parent){
                View v = convertView;
                View view = super.getView(position, convertView, parent);               
                TextView text = (TextView) view.findViewById(android.R.id.text1);
                text.setTextColor(Color.BLACK);
                text.setBackgroundColor(Color.WHITE);
                return view;
            }
        };

        adp1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

        //set the adapter to the spinnner
        holder.spinner.setAdapter(adp1);        

        //if there is only one other part besides "" then set that as default part
        if(partLotNumbersArrayList.get(position).size() == 2){
            holder.spinner.setSelection(1);
        }   

        holder.spinner.setOnItemSelectedListener(new OnItemSelectedListener(){

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


            }

            @Override
            public void onNothingSelected(AdapterView<?> arg0) {
                // TODO Auto-generated method stub
                ///ViewOrderlineAssemblyActivity.assembly.addPart(new Part((String)holder.txtName.getText(), ""));
                //Log.v("OnNothingSelected", (String)holder.txtName.getText());
            }

        });

        return convertView;
    }

    static class ViewHolder {
        TextView txtName;
        Spinner spinner;
    }
}
Was it helpful?

Solution

try implementing onItemSelected in your OnItemSelectedListener:

@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
    ((TextView) arg0.getChildAt(0)).setTextColor(Color.RED);
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top