2016-08-17 2 views
1

У меня есть таблица 'D', в которой каждая строка имеет 4 текстовых изображения. Я установил onlicklistener, и он работает. Я хочу, чтобы пользователь нажимал на любой текстовый вид этой строки, а текстовый фон менялся на ltgray. Я решу, будет ли установлено каждое текстовое представление или вся строка. Прямо сейчас только последнее текстовое изображение устанавливается в ltgray независимо от того, какой пользователь нажимает. Основываясь на коде, мое предположение заключается в том, что я могу установить каждый tv в значение onclick по индексу x в коде: Но это не работает. Не могу я получить доступ к каждому textViewB с помощью x ?. Код показывает, что tvB устанавливается для других ситуаций, но это новая настройка текстового фона всех текстовых просмотров. Я не хочу фона строки. Это легко и работает. но показывают только границы. Моя потребность - это текстовый фон для изменений для всех 4 телевизоров в этой таблице. Спасибо вам заранее:динамически настраиваемый цвет фона текста

try { 
     for(int x=0 ; x<loopCount; x++){ 
      TableRow.LayoutParams params = new TableRow.LayoutParams(headerCellsWidth[x + 1], LayoutParams.MATCH_PARENT); 
      params.setMargins(2, 2, 0, 0); 

      Log.d("Loadrunner", "info[x] " + x + " " + info[x]); 
      final TextView textViewB = this.bodyTextView(info[x]); 
      textViewB.setTextColor(0xFF000000); 
      tableRowForTableD.addView(textViewB, params); 
      //*************************************** Clickable cell 
      tableRowForTableD.setClickable(true); 
      tableRowForTableD.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        //tableRowForTableD.setBackgroundColor(getResources().getColor(android.R.color.holo_blue_bright)); 
        textViewB.setBackgroundColor(Color.LTGRAY); 
        Toast.makeText(getContext(), "Item on aisle select/deselect", Toast.LENGTH_SHORT).show(); 
       } 
      }); 
      tableRowForTableD.setOnLongClickListener(new View.OnLongClickListener() { 
       @Override 
       public boolean onLongClick(View v) { 
        //tableRowForTableD.setBackgroundColor(getResources().getColor(android.R.color.holo_blue_bright)); 
        Toast.makeText(getContext(), "Item on aisle Edit", Toast.LENGTH_SHORT).show(); 
       return true; 
       } 
      }); 
      //*************************************************************** 
     } 
    } catch(Exception e){ 
     e.printStackTrace(); 
    } 

Это все сделано в коде. Нет xml или стилей.

+0

Проблема в следующем: вы устанавливаете OnClickListener в каждом цикле. В представлении может быть только один OnClickListener, поэтому будет работать только последний. Подсказка для решения. Храните массив текстовых просмотров для каждого tableRow, чтобы вы могли перебирать этот массив при щелчке строки – devnull69

+0

@devnull. Только последнее текстовое изображение получает изменение фона. Я действительно не хочу отслеживать и синхронизировать массив. –

ответ

1
yourView.setBackgroundColor(ContextCompat.getColor(getActivity(), R.color.your_color)); 

или

yourView.setBackgroundColor(getResources().getColor(R.color.your_color)); 

или

yourView.setBackgroundColor(Color.parseColor("#ffffff")); 

Я считаю, что вы хотите в onClickListener. У вас уже есть представление, просто измените его. Например:

@Override 
public void onClick(View v) { 
    ViewGroup row = (ViewGroup) v.getParent(); 
    for (int itemPos = 0; itemPos < row.getChildCount(); itemPos++) { 
     View view = row.getChildAt(itemPos); 
     if (view instanceof TextView) { 
      textView = (TextView) view; 
      textView.setBackgroundColor(Color.LTGRAY); 
     } 
    } 
    Toast.makeText(getContext(), "Item on aisle select/deselect", Toast.LENGTH_SHORT).show(); 
} 
+0

Но щелчок представляет собой строку таблицы ... OP хочет изменить цвет фона (всех) текстовых просмотров в этой строке – devnull69

+2

В ** OnClick ** добавить: ViewGroup row = (ViewGroup) v.getParent() ; for (int itemPos = 0; itemPos Amg91

+0

Вы должны добавить это к своему ответу – devnull69