Як отримати фоновий колір Android TableRow?

Я створив таблицю в Android для відображення результатів пошуку даних за допомогою TableRow. TableRows динамічно створюються, тому що одночасно може відображатися до 30 рядків.

Я намагаюся переключити фоновий колір рядка, коли користувач торкається рядка, і може легко змінити фоновий колір за допомогою програми android: onClick. Проте після натискання рядка та зміни кольору я не можу змінити колір назад, коли інший android: ініціюється подія onClick.

Отже, як я можу визначити стан кольору TableRow, щоб я міг побудувати належний контроль потоку та правильно змінити колір? Є безліч прикладів того, як встановити колір тла, але нічого корисного в ОТРИМАНІ фонового кольору.

Дякую

0
Спробуйте подібне: Drawable drawable = getBackground (); якщо (drawable instanceof ColorDrawable) {ColorDrawable colorDrawable = (ColorDrawable) drawable; int color = colorDrawable.getColor (); }
додано Автор JustAnotherCoder, джерело
getBackground ()?
додано Автор JustAnotherCoder, джерело
getBackground ()?
додано Автор JustAnotherCoder, джерело
Спробуйте подібне: Drawable drawable = getBackground (); якщо (drawable instanceof ColorDrawable) {ColorDrawable colorDrawable = (ColorDrawable) drawable; int color = colorDrawable.getColor (); }
додано Автор JustAnotherCoder, джерело
Спробуйте подібне: Drawable drawable = getBackground (); якщо (drawable instanceof ColorDrawable) {ColorDrawable colorDrawable = (ColorDrawable) drawable; int color = colorDrawable.getColor (); }
додано Автор JustAnotherCoder, джерело
я запропонував вам встановити стандартний колір для всіх рядків таблиці, щоб ви могли скинути цей колір за замовчуванням, коли користувач натискає іншу таблицю.
додано Автор blganesh101, джерело
я запропонував вам встановити стандартний колір для всіх рядків таблиці, щоб ви могли скинути цей колір за замовчуванням, коли користувач натискає іншу таблицю.
додано Автор blganesh101, джерело
getBackground() повертає Drawable. Що ти з цим робиш?
додано Автор user1168400, джерело
getBackground() повертає Drawable. Що ти з цим робиш?
додано Автор user1168400, джерело
getBackground() повертає Drawable. Що ти з цим робиш?
додано Автор user1168400, джерело
Користувач повинен мати можливість вибирати кілька рядків, тому я спочатку повинен визначити стан кольору наведеної рядки. Існує стандартний колір, але я не знаю, як перейти на нього.
додано Автор user1168400, джерело
Користувач повинен мати можливість вибирати кілька рядків, тому я спочатку повинен визначити стан кольору наведеної рядки. Існує стандартний колір, але я не знаю, як перейти на нього.
додано Автор user1168400, джерело

7 Відповіді

Приклад:

int MyPosition=100000;
...
...
onclick()
{
 if(MyPosition==100000)
 {
 //first time selection
  MyPosition=a//a=any int position
 //change bg of selected row
 }
 else
 {
//now u r selecting second or N th time
//so first set previous bg of MyPosition
//and clear MyPosition
//Now set bg of current bg nd set MyPosition
 }

 }
0
додано

Приклад:

int MyPosition=100000;
...
...
onclick()
{
 if(MyPosition==100000)
 {
 //first time selection
  MyPosition=a//a=any int position
 //change bg of selected row
 }
 else
 {
//now u r selecting second or N th time
//so first set previous bg of MyPosition
//and clear MyPosition
//Now set bg of current bg nd set MyPosition
 }

 }
0
додано

Ви можете зберегти колір, який ви встановили за допомогою setTag (), і відновити його за допомогою getTag ().

void OnClick(View v)
{
  Integer color = v.getTag();
  if (null == color)//not clicked yet
  {
     color = COLOR_NOT_TOGLED;
  }
  if (COLOR_NOT_TOGLED == color)
  {
     color = COLOR_TOGLED;
  }
  else
  {
     color = COLOR_NOT_TOGLED;
  }
  v.setBackGround(color);
  v.setTag(color);//save
}

UPDATE Ok, let's fix it))

void OnClick(View v)
{
    Object o = v.getTag();
    Integer color = (null == o) ? COLOR_NOT_TOGLED : (Integer) o;
    if (COLOR_NOT_TOGLED == color) {
        color = COLOR_TOGLED;
    } else {
        color = COLOR_NOT_TOGLED;
    }
    v.setBackgroundColor(color);
    v.setTag(color);//save
}
0
додано
@ user1168400. Якщо ви бачите мій псевдокод, ви побачите, що я продовжую справу, якщо тег ще не встановлений (якщо тег є нульовим). Тому вам не потрібно "ініціалізувати" теги у кожному рядку при створенні таблиці. Якщо тег натискання рядка є нульовим, я вважаю, що цей рядок знаходиться в стані "не тогельований", і нам потрібно встановити колір повернення до COLOR_TOGLED. У будь-якому разі, моя відповідь - це лише трюк для вирішення вашої проблеми. Якщо б я виконував цю функцію, я створюю щось на зразок списку або sparsearray, щоб зберегти стан кожного рядка.
додано Автор JustAnotherCoder, джерело
Мабуть, потрібно створити теги, оскільки створений таблиця, а потім стежити за всіма тегами. Я просто хочу визначити колір, перевірте, чи його змінено.
додано Автор user1168400, джерело
Цілий колір = v.getTag (); не сумісний, оскільки v.getTag() - це об'єкт, а не ціле число.
додано Автор user1168400, джерело
Блискучий! Це працює як чарівність. Дякую
додано Автор user1168400, джерело

Ви можете зберегти колір, який ви встановили за допомогою setTag (), і відновити його за допомогою getTag ().

void OnClick(View v)
{
  Integer color = v.getTag();
  if (null == color)//not clicked yet
  {
     color = COLOR_NOT_TOGLED;
  }
  if (COLOR_NOT_TOGLED == color)
  {
     color = COLOR_TOGLED;
  }
  else
  {
     color = COLOR_NOT_TOGLED;
  }
  v.setBackGround(color);
  v.setTag(color);//save
}

UPDATE Ok, let's fix it))

void OnClick(View v)
{
    Object o = v.getTag();
    Integer color = (null == o) ? COLOR_NOT_TOGLED : (Integer) o;
    if (COLOR_NOT_TOGLED == color) {
        color = COLOR_TOGLED;
    } else {
        color = COLOR_NOT_TOGLED;
    }
    v.setBackgroundColor(color);
    v.setTag(color);//save
}
0
додано
@ user1168400. Якщо ви бачите мій псевдокод, ви побачите, що я продовжую справу, якщо тег ще не встановлений (якщо тег є нульовим). Тому вам не потрібно "ініціалізувати" теги у кожному рядку при створенні таблиці. Якщо тег натискання рядка є нульовим, я вважаю, що цей рядок знаходиться в стані "не тогельований", і нам потрібно встановити колір повернення до COLOR_TOGLED. У будь-якому разі, моя відповідь - це лише трюк для вирішення вашої проблеми. Якщо б я виконував цю функцію, я створюю щось на зразок списку або sparsearray, щоб зберегти стан кожного рядка.
додано Автор JustAnotherCoder, джерело
Мабуть, потрібно створити теги, оскільки створений таблиця, а потім стежити за всіма тегами. Я просто хочу визначити колір, перевірте, чи його змінено.
додано Автор user1168400, джерело
Цілий колір = v.getTag (); не сумісний, оскільки v.getTag() - це об'єкт, а не ціле число.
додано Автор user1168400, джерело
Блискучий! Це працює як чарівність. Дякую
додано Автор user1168400, джерело

Спробуйте це:

// save old view style
Drawable defaultViewStyle = view.getBackground();

// set new style
view.setBackgroundResource(R.drawable.new_view_style);

// return default view style
view.setBackgroundDrawable(defaultViewStyle);

Але я думаю, це не правильний шлях. Найкраще переоцінити всі можливі умови для перегляду:

// res drawable my_table_row_style:
<?xml version="1.0" encoding="utf-8"?>

    
    
    
    

0
додано

Спробуйте це:

// save old view style
Drawable defaultViewStyle = view.getBackground();

// set new style
view.setBackgroundResource(R.drawable.new_view_style);

// return default view style
view.setBackgroundDrawable(defaultViewStyle);

Але я думаю, це не правильний шлях. Найкраще переоцінити всі можливі умови для перегляду:

// res drawable my_table_row_style:
<?xml version="1.0" encoding="utf-8"?>

    
    
    
    

0
додано

Спробуйте це:

// save old view style
Drawable defaultViewStyle = view.getBackground();

// set new style
view.setBackgroundResource(R.drawable.new_view_style);

// return default view style
view.setBackgroundDrawable(defaultViewStyle);

Але я думаю, це не правильний шлях. Найкраще переоцінити всі можливі умови для перегляду:

// res drawable my_table_row_style:
<?xml version="1.0" encoding="utf-8"?>

    
    
    
    

0
додано
android_jobs_ua
android_jobs_ua
120 учасників

Публикуем вакансии и запросы на поиск работы по направлению Android. Здесь всё: full-time, part-time, remote и разовые подработки.

Mobile Dev Jobs UA
Mobile Dev Jobs UA
20 учасників

Публикуем вакансии и запросы на поиск работы по направлению iOS, Android, Xamarin, RN и т.д.