2012-01-19 4 views
0

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

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: Я хочу изменить BackgroundColor из TableRow позволяет сказать, что желтый цвет. Поэтому, если выбрана 1-я строка, bgColor должен быть желтым. Затем, если выбрана 3-я строка, цвет первой строки должен перейти в LTGray.

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

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

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

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

ответ

0

Thanks Friends,

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

0

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

Taken from here:

<?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> 

Не так тщательно, но более полезный ответ here

переключения селектора динамически here

+0

@Gangus, но как настроить селектор в моем java-коде динамически. Я имею в виду, что мне нужно установить метод, называемый «R .....». Я не могу определить, какой метод использовать, чтобы установить его для моего TableRow. – Tvd

+0

Ссылка добавлена ​​в ответ. – Gangnus

+0

@Gangus, я использовал вышеупомянутый xml-код и добавил setBackgroundDrawable() в свой TableRow. РЕЗУЛЬТАТ: Когда я нажимаю на него, он просто мигает желтым цветом, а затем переходит в нормальное состояние, и тогда событие onclick поймано там, где состояние строки: ROW CLICKED CAUGHT - Selected: false Pressed: true Focused: false Почему желтый цвет не сохраняется? – Tvd

0

Ok, чем использовать OnFocusChangeListener. Он ловит получение и потеря внимания.

onFocusChange(View v, boolean hasFocus) 

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