Android列表视图,更改特定视图的属性

时间:2011-08-16 23:02:41

标签: java android listview view

在我的listview上的

我正在滚动到它的特定位置

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崩溃,但即使从该视图中获取文本视图也会崩溃。

帮助?

2 个答案:

答案 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