我正在滚动到它的特定位置
getListView()smoothScrollToPosition(的scrollPosition + 1);
但我也想“突出”这个观点。如何访问此特定视图的属性以更改此位置的背景颜色。
这是listview代码
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/currentText"
android:padding="10dp" android:textSize="24sp" android:textColor="#000000" android:background="@drawable/bglistitem"
android:gravity="center_vertical|center_horizontal">
</TextView>
它只是一个带背景的textview。我试过这样做:
View highlightView = getListView().getChildAt(scrollposition);
highlightView.setDrawingCacheBackgroundColor(Color.parseColor("#2580b0"));
TextView currentText = (TextView)highlightView.findViewById(R.id.currentText);
currentText.setTextColor(Color.parseColor("#ffffff"));
但它总是崩溃!我可以理解为什么setDrawingCacheBackgroundColor
崩溃,但即使从该视图中获取文本视图也会崩溃。
帮助?
答案 0 :(得分:1)
几个星期前我遇到了这个问题。
您不应该使用ListView的getChildAt()函数。例如,如果您使用getChildAt(5),它将拉出可见的第5个视图。
要解决这个问题,我必须创建一个自定义适配器来覆盖getView()并根据我发送的内容设置颜色。
public class RunAdapter extends SimpleAdapter {
public RunAdapter(Context context, List<HashMap<String, String>> items,
int resource, String[] from, int[] to) {
super(context, items, resource, from, to);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = super.getView(position, convertView, parent);
TextView txtView = (TextView) view.findViewById(R.id.lstTurnout);
if (txtView.getText().toString().contains("BLU")) {
txtView.setBackgroundColor(Color.rgb(0x00, 0x00, 0xaa));
txtView.setText(txtView.getText().toString().replace("BLU", ""));
} else {
txtView.setBackgroundColor(Color.rgb(0xaa, 0x00, 0x00));
txtView.setText(txtView.getText().toString().replace("RED", ""));
}
}
这不是最漂亮的方法,但它有效! 根据我想要TextView的颜色,我通过'BLU'或'RED' 然后在getView中,我检查字符串包含哪些内容并相应地更改颜色。
希望我有所帮助,祝你好运!
修改的 根据请求构造函数
答案 1 :(得分:0)
getChildAt需要一个索引,而不是一个scrollpostion。
此致 Stphane