wbk727
wbk727

Reputation: 8408

Change text colour of List View items via 'if (position == x)' method

Is it possible to change the colour of the text for my list view items programmatically to a hex colour using the 'if position' method? Below is the code I am currently using for the main activity and the if positions here are for navigating to other activities and so I would like to know what in my code needs to be added or modified as necessary. Also if I set theme of a app to Holo Dark for example, will it always say like that and would it be impossible for those who buy my app to tamper with the app's theme?

public class MainActivity extends Activity {

ListView mainList;

String[] listContent = {
        "Line 1", "Line 2"
};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mainList = (ListView)findViewById(R.id.main_listView);
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,listContent);
    mainList.setAdapter(adapter);

    mainList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
            //When clicked, go to specific activity
            if(position == 0) {
                //code specific to first list item
                Intent myIntent = new Intent(view.getContext(), Line1Activity.class);
                startActivityForResult(myIntent, 0);
            }
            if(position == 1) {
                //code specific to second list item
                Intent myIntent = new Intent(view.getContext(), Line1Activity.class);
                startActivityForResult(myIntent, 0);
            }
    });
}

Upvotes: 0

Views: 1113

Answers (1)

Gyebro
Gyebro

Reputation: 1521

I would use a custom ArrayAdapter which sets the color based on position in getView Something like

MainActivity.java

public class MainActivity extends Activity {

ListView mainList;
String[] listContent = {
        "Line 1", "Line 2", "Line 3", "Line 4"
};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mainList = (ListView)findViewById(R.id.main_listView);
    MyColoringAdapter adapter = new MyColoringAdapter(this,listContent);
    mainList.setAdapter(adapter);

    mainList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
            //When clicked, go to specific activity
            Toast.makeText(getApplicationContext(),"Clicked on list item "+position,Toast.LENGTH_SHORT).show();
            switch (position) {
                case 0:
                    //code specific to first list item
                    break;
                case 1:
                    //code specific to second list item
                    break;
            }
        }
    });
}

private class MyColoringAdapter extends ArrayAdapter<String> {
    private final Context context;
    private final String[] values;

    public MyColoringAdapter(Context context, String[] values) {
        super(context, R.layout.list_item, values);
        this.context = context;
        this.values = values;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View rowView = inflater.inflate(R.layout.list_item, parent, false);
        TextView textView = (TextView) rowView.findViewById(R.id.list_textview);
        // Set text
        textView.setText(values[position]);
        // Set color depending on position
        int textColorId = R.color.black; // Default color
        switch (position%2) {
            case 0:
                // Even places
                textColorId = R.color.red; break;
            case 1:
                // Odd places
                textColorId = R.color.green; break;
        }
        textView.setTextColor(getResources().getColor(textColorId));
        return rowView;
    }
}
}

list_item.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:textAppearance="?android:attr/textAppearanceLarge"
    android:id="@+id/list_textview" />
</LinearLayout>

colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="red">#ff0000</color>
    <color name="green">#00ff00</color>
    <color name="black">#000000</color>
</resources>

Upvotes: 1

Related Questions