我正在使用带有固定标题行的自定义列表视图构建的表格网格。
当用户单击其中一个固定标题单元格时,整个数据表将按该特定列排序。
我已经研究出如何通过将升序或降序箭头添加到现有标题/列标题来更改单击的标题单元格的文本(请参见下面的代码)。
但是,我还需要更改数据表中所有其他列标题单元格的文本,以便从其他标题单元格中删除任何现有的升序或降序箭头。
我遇到的问题是:如何在运行时找到其他列标题单元格的视图 ID。
请注意,无法通过从 xml 布局中搜索特定的 TextView ID 来找到这些视图 ID,因为所有表头单元格都是使用名为 text1 的通用 TextView id 创建的(请参阅下面用于表头的线性布局代码) :
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/item_table1_header"
android:gravity="center"
android:orientation="vertical" >
<TextView
android:id="@android:id/text1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
下面是用于创建表格单元格的 getView 代码,其中还包括内置的 OnClickListener。请注意,固定表标题行编号为 -1。
一旦我可以识别它们现有的 TextView ID,我将需要添加代码以更改标记为“TODO”的部分中现有标题单元格的文本:
@Override
public View getView(final int row, final int column, View converView, ViewGroup parent) {
if (converView == null) {
converView = inflater.inflate(getLayoutResource(row, column), parent, false);
}
setText(converView, getCellString(row, column));
converView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (row == -1) { // clicked on header row cell
for(int col=0; col<=getColumnCount(); col++){
if (col == column+1) {
if (getColOrder(col) == 0 || getColOrder(col) == 2) {
setText(v, getCellString(row, column) + " ↑"); // reset selected column header to ASC order
setColOrder(col, 1);
} else {
setText(v, getCellString(row, column) + " ↓"); // reset selected column header to DESC order
setColOrder(col, 2);
}
} else {
setColOrder(col, 0); // reset all other column headers to 0 (not ordered)
// TODO:
// here we need to change the text of all other header cells, using their view ids
}
}
}
}
});
return converView;
}