2016-12-27 2 views
1

У меня есть следующий estructure:Изменение TextColor программно в ListView, который зависит от arrayadapter

ArrayList<String> arrayList = new ArrayList<>(); 
list = (ListView) findViewById(R.id.list1); 

arrayAdapter = new ArrayAdapter<String>(INGR_NOTAS.this, R.layout.list_item_clickable, R.id.txtitem, arrayList); 

list.setAdapter(arrayAdapter); 

где расположение ListView исходит от list_item_clickable.xml и textiview "txtitem" внутри него:

<?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:text="TextView" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/txtitem" 
     android:textColor="@android:color/white" 
     android:background="@android:drawable/editbox_dropdown_dark_frame" 
     android:textAlignment="center" /> 
</LinearLayout> 

Эта структура работает во многих классах, и, как говорится в Textview, цвет текста всегда белый, но теперь мне нужно изменить цвет текста внутри списка в зависимости от значения текста (иногда белого, иногда красного). Итак, как я могу добавить это изменение, не добавляя большого влияния в остальную часть кода долгое время все приложение ????

Спасибо за любой совет !!

ответ

2

попробовать это:

ArrayList<String> arrayList = new ArrayList<>(); 
list = (ListView) findViewById(R.id.list1); 

arrayAdapter = new ArrayAdapter<String>(INGR_NOTAS.this, R.layout.list_item_clickable, R.id.txtitem, arrayList){ 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent){ 
     View view = super.getView(position, convertView, parent); 
     ((TextView)view.findViewById(R.id.txtitem)).setTextColor(position % 2 == 0 ? Color.WHITE : Color.RED); // here can be your logic 
     return view; 
    }; 
}; 

list.setAdapter(arrayAdapter); 

надеюсь, что это помогает

+0

Я пробовал его, проверяя, могу ли я изменить цвет текста из вашего кода. Я просто поместил Color.RED внутри setTextColor, но ничего не изменилось. –

+0

Вы добавили строки в массивList? – Oleg

+0

Когда я добавляю, в зависимости от ситуации я использую: –

1

Создайте свой собственный адаптер, который extends ArrayAdapter и переопределите getView(). Это не так сложно.

1

Использование textView.setTextColor(getResources().getColor(R.id.red);, если на основе списка массива элемента. Затем создайте класс, который расширяет ArrayAdapter, в getView(,,) метод устанавливает цвет.

пример:

@Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      ViewHolder holder = null; 
      if (convertView == null) { 
       convertView = mInflater.inflate(R.layout.item1, null); 
       holder = new ViewHolder(); 
       holder.textView = (TextView)convertView.findViewById(R.id.text); 
holder.textView.setTextColor(getResources().getColor(R.id.your_color); 
       convertView.setTag(holder); 
      } 
      return convertView; 
     } 
0

С SimpleAdapter также возможно. Вот мое решение.

List<Map<String, String>> detailsList = debitorRecord.getDetails(); 

    String[] from = {"created_at","comment","sum"}; 
    int[] to = {R.id.detailCreatedAt, R.id.detailComment, R.id.detailSum}; 
    ListAdapter listAdapter = new SimpleAdapter(this, detailsList, R.layout.list_detail_item, from, to) 
    { 
     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      View view = super.getView(position, convertView, parent); 
      TextView textView = (TextView) view.findViewById(R.id.detailSum); 
      //Do what u want here, in my case I 
      Map<String, String> currentRow = detailsList.get(position); 
      int type = Integer.parseInt(currentRow.get("type")); 
      if (DebitorRecord.TYPE_PAYMENT == type) textView.setTextColor(Color.GREEN); 
      else textView.setTextColor(Color.RED); 

      return view; 
     } 
    }; 

    listView.setAdapter(listAdapter); 
Смежные вопросы