В качестве моего требования к проекту я должен выделить строку таблицы onClick. Есть ли способ сделать это? Или, пожалуйста, предложите мне альтернативу?
Как выделить строку таблицы нажатием кнопки?
Ответ 1
Если вы хотите использовать фондовый щелчок на клике, как вы получаете с общим списком ListView, вы хотите установить фон каждой строки как android:background="@android:drawable/list_selector_background"
Вот пример:
<TableLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:stretchColumns="0">
<TableRow
android:id="@+id/first_row"
android:background="@android:drawable/list_selector_background" >
... row content ...
</TableRow>
</TableLayout>
Затем в коде
TableRow firstRow = (TableRow) findViewById(R.id.first_row);
firstRow.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO: do your logic here
}
}
И вы должны получить строку с подсветкой, как в ListView...
EDIT: Выше будет предоставлен список фонового селектора списка по умолчанию. Если вы хотите, чтобы более общий селектор (например, селектор материалов, когда пользователь касается строки), используйте это:
android:background="?android:attr/selectableItemBackground"
Также это относится не только к TableRows. Вы должны иметь возможность сделать это практически для любого общего виджета с прикрепленным onClickListener (TextViews, Buttons и т.д.).
Ответ 2
Даже я столкнулся с той же проблемой с помощью salil pandit, ответ немного изменился, и это работает для меня
Это TableRow
в xml:
<TableRow
android:id="@+id/tableRow1"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_weight="1"
android:padding="5dip"
android:background="@drawable/selector">
Это selector.xml
в папке res\drawable
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_focused="true"
android:state_pressed="true"
android:drawable="@android:drawable/list_selector_background"></item>
<item android:state_focused="true"
android:state_pressed="false"
android:drawable="@android:drawable/list_selector_background"></item>
<item
android:state_focused="false"
android:state_pressed="true"
android:drawable="@android:drawable/list_selector_background" />
<item android:drawable="@android:drawable/list_selector_background"></item>
</selector>
Ответ 3
Внутри onclicklistener добавьте:
tr1.setBackgroundResource(drawable.list_selector_background);
Где tr1 - ваш вкладчик. (вам нужно будет сделать окончательный таблеток для его работы).
Ответ 4
private OnClickListener tablerowOnClickListener = new OnClickListener()
{
public void onClick(View v)
{
//Highlight selected row
//Highlight selected row
for (int i = 1; i < tblItemDetail.getChildCount(); i++)
{
View row = tblItemDetail.getChildAt(i);
if (row == v)
{
row.setBackgroundColor(getResources().getColor(android.R.color.holo_red_light));
}
else
{
//Change this to your normal background color.
row.setBackgroundColor(getResources().getColor(android.R.color.transparent));
}
}
//...
}
};
Ответ 5
String _row_selected = null;
boolean _is_selection_even = false;
private TableLayout TL;
TableRow row_data = new TableRow(this);
row_data.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (_row_selected != null) {
if (Integer.parseInt(_row_selected) == TL.indexOfChild(v)) {
if (_is_selection_even) {
TL.getChildAt(Integer.parseInt(_row_selected)).setBackgroundColor(0xFF00FF00);
_is_selection_even = false;
} else {
TL.getChildAt(Integer.parseInt(_row_selected)).setBackgroundColor(Color.WHITE);
_is_selection_even = true;
}
} else {
TL.getChildAt(Integer.parseInt(_row_selected)).setBackgroundColor(Color.WHITE);
v.setBackgroundColor(0xFF00FF00);
_row_selected = null;
_row_selected = TL.indexOfChild(v) + "";
}
} else {
v.setBackgroundColor(0xFF00FF00);
_row_selected = null;
_row_selected = summaryTL.indexOfChild(v) + "";
}
}
});