Android: запрос относительно выбора TableRow - PullRequest
0 голосов
/ 19 января 2012

В моем XML у меня есть TableLayout только с 1 TableRow, то есть заголовком.Остальные все строки я добавляю динамически, устанавливая BackgroundColor (LTGray) для TableRow и TextColor для TextViews в нем.Я также обрабатываю событие клика в каждой строке.

private void createView(TableRow tr, TextView tv, String data, int rowId) {
    tv.setText(data);

    //tv.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
    tv.setTextColor(Color.BLACK);
    tv.setPadding(20, 0, 0, 0);

    tr.setPadding(0, 1, 0, 1);
    tr.setBackgroundColor(Color.LTGRAY);
    tr.setId(rowId);
    tr.setClickable(true);
    tr.setOnClickListener(this);
    tr.addView(tv);
}

Reg selection: я хочу изменить BackgroundColor TableRow, скажем, Yellow.Таким образом, если выбран 1-й ряд, bgColor должен быть желтым.Затем, если выбран 3-й ряд, цвет 1-го ряда должен превратиться в LTGray.

И если щелкнуть любой из строк, то выбранная строка (если она вообще есть) также должна быть отменена.Для этого мне нужно добавить основной макет clickListener ИЛИ снова сделать выбор строки, и она станет невыбранной?

Может ли селектор (список состояний отображаться) работать в обоих направлениях, или я должен обработать его программно.Какой тип Drawable я должен использовать для setBackgroundDrawable в своем Java-коде, чтобы выбрать список состояний для рисования?

Я считаю, что, как и другие компоненты для TableRow, onClick также позаботится о onTouch.Пожалуйста, поправьте меня, если я не прав.Так же, как и та же особенность, касающаяся касания ряда.

Каков наилучший способ достижения цели?Любая помощь высоко ценится.

Ответы [ 3 ]

0 голосов
/ 19 января 2012

Хорошо, чем использовать OnFocusChangeListener. Ловит получение и потерю фокуса.

onFocusChange(View v, boolean hasFocus) 

Вызывается при изменении состояния фокуса вида.

0 голосов
/ 30 января 2012

Спасибо, Друзья,

Мне удалось обработать это в самом коде.Добавлен обработчик кликов для каждой строки addd и соответственно обработаны цвета выбранной и невыбранной строки.

0 голосов
/ 19 января 2012

Не меняйте это в коде! Вместо этого используйте селектор.

Взяты отсюда:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!--  Active state --> 
    <item android:state_selected="true" android:state_focused="false" android:state_pressed="false" android:drawable="@android:color/transparent" />     
<!--  Inactive state--> 
    <item android:state_selected="false" android:state_focused="false"         android:state_pressed="false" android:drawable="@android:color/transparent" />
     <!--  Pressed state-->
     <item android:state_pressed="true" android:drawable="@android:color/yellow" /> 
    <!--  Selected state (using d-pad) -->
     <item android:state_focused="true" android:state_selected="true"         android:state_pressed="false" android:drawable="@android:color/yellow" />
 </selector> 

Не такой подробный, но более полезный ответ здесь

динамическое изменение селектора здесь

...