我有Fragment
正在实施ListView
。我在ListView
类中有Fragment
的全局引用,我想更改ListView
方法中updateStep(int position)
项的背景颜色。我不想改变列表中每个项目的颜色。我正在片段中进行一些处理,我想相应地更改ListView
项的颜色。
我的updateStep
方法很简单:
public void updateStep(int position) {
if(stepsListView != null)
stepsListView.getChildAt(position).setBackgroundColor(Color.GREEN);
}
但是getChildAt(position)
返回null。获取项目和更新项目颜色的另一种方法是什么。
list_item.xml如下所示:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white"
android:padding="8dp">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textSize="@dimen/standard_text_size"
android:textColor="@color/gray"
android:text="@string/about_text_default"
android:id="@+id/text_list_item">
</TextView>
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textSize="16sp"
android:textColor="@color/gray"
android:text="@string/about_text_default"
android:id="@+id/test_list_item_description">
</TextView>
</LinearLayout>
并且片段(具有列表)如下所示:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.carmanah.views.fragments.TestListFragment">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/text_heading"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:textColor="@color/gray"
android:textStyle="bold"
android:textSize="@dimen/standard_heading_text_size"
android:text="@string/heading_text_tests">
</TextView>
<ListView
android:id="@+id/task_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:minHeight="@dimen/standard_text_size"
android:divider="@color/gray"
android:dividerHeight="2dip">
</ListView>
</LinearLayout>
</FrameLayout>
P.S。我在此列表中使用CustomArrayAdapter
。
答案 0 :(得分:1)
您只能从ListView获取可见的视图,因为ListView中的行视图是可重用的。所以,你应该控制项目位置。
以下方法可帮助您获取视图。
public View getViewByPosition(int pos, ListView listView) {
final int firstListItemPosition = listView.getFirstVisiblePosition();
final int lastListItemPosition = firstListItemPosition + listView.getChildCount() - 1;
if (pos < firstListItemPosition || pos > lastListItemPosition ) {
return listView.getAdapter().getView(pos, null, listView);
} else {
final int childIndex = pos - firstListItemPosition;
return listView.getChildAt(childIndex);
}
}
您可以更改项目的背景颜色,如下所示:
public void updateStep(int position) {
if(stepsListView != null)
getViewByPosition(position, stepsListView).setBackgroundColor(Color.GREEN);
}
答案 1 :(得分:0)
获得物品的另一种方式&amp;通过在自定义数组适配器的getView方法中指定颜色来更新颜色。 Juts使相对/线性布局具有所有组件,并使用以下语句指定颜色: -
viewHolder.lin_item.setBackgroundColor(getResources().getColor(R.color.white));
其中lin_item是ViewHolder&amp;中的Liner布局。您可以根据您选择的任何条件指定颜色。
getView方法已经有位置,因此无需担心。