Как изменить цвет элементов ListView в фокусе и щелчке

У меня есть список View в моем приложении (это макет xml):

   

Каждый элемент моего списка View состоит из двух TextView:

           

Я заполняю свой списокView из ArrayAdapter, таким образом:

 public class Matches extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //set layout setContentView(R.layout.list_layout); // obtain reference to listview ListView listView = (ListView) findViewById(R.id.arrayList); ArrayAdapter arrayAdapter = new ArrayAdapter( this, R.layout.custom_row, R.id.description, createItems()) { @Override public View getView (int position, View convertView, ViewGroup parent){ Match item = getItem (position); LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); View rowView = inflater.inflate(R.layout.custom_row, null); TextView description = (TextView)rowView.findViewById(R.id.description); TextView result = (TextView)rowView.findViewById(R.id.result); description.setText(item.description + " Risultato: " + item.result ); result.setText(item.date + " " + item.hour); return rowView; } }; listView.setAdapter(arrayAdapter); 

Моя цель – изменить цвет текста и backgorund этих дочерних представлений всякий раз, когда выбран или нажат родительский элемент.

Как мне это сделать?

Представления child в строке списка должны рассматриваться как выбранные, когда выбрана родительская строка, поэтому вы должны просто установить нормальный режим рисования / списка цветов в представлениях, которые вы хотите изменить, и не нужен беспорядочный Java-код. См. Это сообщение SO .

В частности, вы должны установить textColor вашего textViews в XML-ресурс, подобный этому:

            

В вашем main.xml включить в ListView следующее:

 android:drawSelectorOnTop="false" android:listSelector="@android:color/darker_gray" 
     

Вот хорошая статья о том, как использовать селекторы со списками.

Вместо того, чтобы устанавливать его как андроид: фон ListView, я считаю, что вы хотите установить android: listSelector, как показано ниже:

  
 listview.setOnItemLongClickListener(new OnItemLongClickListener() { @Override public boolean onItemLongClick(final AdapterView parent, View view, final int position, long id) { // TODO Auto-generated method stub parent.getChildAt(position).setBackgroundColor(getResources().getColor(R.color.listlongclick_selection)); return false; } }); 

Очень старый, но я только что боролся с этим, так я решил его в чистом xml. В res / values ​​/ colors.xml я добавил три цвета ( цвет _… );

  #66000000 #ff666666 #ff000066 #ff006600  

В папке res / drawable я создал listview_colours.xml, который содержал;

        

В main_activity.xml найдите List List и добавьте drawable в listSelector ;

   

Играйте с состояниями _… элементов в listview_colours.xml, чтобы получить необходимый эффект.

Существует также метод, в котором вы можете установить стиль представления списка, но мне никогда не удавалось заставить его работать

Объявите компоненты элементов списка как final вне вашего setOnClickListener или все, что вы хотите применить к элементу списка следующим образом:

 final View yourView; final TextView yourTextView; 

И в переопределении onClick или любого используемого вами метода просто установите цвета по мере необходимости:

 yourView.setBackgroundColor(Color.WHITE/*or whatever RGB suites good contrast*/); yourTextView.setTextColor(Color.BLACK/*or whatever RGB suites good contrast*/); 

Или без окончательной декларации, если предположим, что вы используете onClick () для пользовательского адаптера для заполнения списка, это то, что я использовал в getView () для моего setOnClickListener / onClick ():

 //reset color for all list items in case any item was previously selected for(int i = 0; i < parent.getChildCount(); i++) { parent.getChildAt(i).setBackgroundColor(Color.BLACK); TextView text=(TextView) parent.getChildAt(i).findViewById(R.id.item); text.setTextColor(Color.rgb(0,178,178)); } //highlight currently selected item parent.getChildAt(position).setBackgroundColor(Color.rgb(0,178,178)); TextView text=(TextView) parent.getChildAt(position).findViewById(R.id.item); text.setTextColor(Color.rgb(0,178,178)); 
  • AlertDialog изнутри BroadcastReceiver ?? Это можно сделать?
  • Цвет текста пункта меню «Действие»
  • Пример и объяснение для Android AsyncTask
  • Что заставляет Android ContentResolver.query () вернуть null?
  • MAT (Eclipse Memory Analyzer) - как просматривать растровые изображения из дампа памяти
  • Gradle не удалось создать при активации proguard
  • getApplicationContext (), getBaseContext (), getApplication (), getParent ()
  • Значение по умолчанию для Android «debuggable»
  • Как удалить фокус, не устанавливая фокус на другой элемент управления?
  • import .R не может быть разрешен при импорте actionbarsherlock
  • Эмулятор Android Studio не поставляется с Play Store для API 23
  • Давайте будем гением компьютера.