更改recyclerview项目颜色

时间:2018-02-14 06:26:46

标签: android android-recyclerview

我有一个recyclerview recyclerview行包含两个textviews

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="60dp"
android:elevation="2dp"
android:id="@+id/l1"
android:orientation="horizontal">


<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal|center_vertical"
    android:layout_marginBottom="@dimen/margin_12"
    android:layout_marginLeft="@dimen/margin_22"
    android:layout_marginRight="@dimen/margin_22"
    android:layout_marginTop="@dimen/margin_12"
    android:orientation="vertical">

    <TextView
        android:id="@+id/tv1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="fdgdfgfdgfdg"
        android:textAlignment="center"
        android:textColor="@color/color"
        android:textSize="@dimen/text_size_16" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal"
        android:orientation="horizontal">



        <TextView
            android:id="@+id/tv2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="jh"
            android:textColor="@color/color"
            android:textSize="@dimen/text_size_9" />
    </LinearLayout>

</LinearLayout>

我想要的是将点击的项目的文本颜色更改为红色。以及其他黑色物品

我在适配器中所做的是

class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
    TextView tv_1, tv_2;
    LinearLayout l1 ;

    /*package */ MyViewHolder(final View itemView) {
        super(itemView);
        l1 = itemView.findViewById(R.id.l1) ;
        tv1 = itemView.findViewById(R.id.tv1);
        tv2 = itemView.findViewById(R.id.tv2);
        tv1.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        tv1 = itemView.findViewById(R.id.tv1);
        tv1.setTextColor(Color.parseColor("#d30c20"));
        tv2.setTextColor(Color.parseColor("#d30c20"));
        String id = tv1.getText().toString();
        mItemClickListener.onItemClick(view, getAdapterPosition(), id);
    }
}

这很好但是当我点击其他项目时我想将之前所选项目的项目颜色重置为其原始颜色。

简而言之,我想每次都改变所选项目和未选项目的颜色

怎么做?

2 个答案:

答案 0 :(得分:0)

将此添加到适配器;

int selectedItemPosition;
int RED_TEXT_VIEW = 100;
int BLACK_TEXT_VIEW = 101;

每次触发onClick()事件时,请将selectedItemPosition变量设置为点击位置。同时致电notifyDataSetChanged()。如果排名为getItemViewType(),则覆盖RED_TEXT_VIEW以返回selectedItemPosition,否则返回BLACK_TEXT_VIEW

当您在viewType中获得onCreateViewHolder()时,请根据应viewTypeRED_TEXT_VIEW

BLACK_TEXT_VIEW返回相应的观看次数

答案 1 :(得分:0)

将所有项目更改为原始颜色,然后将点击的项目更改为所选颜色将起作用,但无论如何它都不是最好的。 我会选择其他的东西,比如这个:

在适配器中定义一个ArrayList:

ArrayList<Integer> changedItems = null;

然后在将任何项目更改为您喜欢的颜色后,请确保通过将项目位置添加到ArrayList来跟踪项目位置:

changedItems.add(itemPosition);

然后,在为项目设置颜色之前,检查是否有更改的项目并恢复它们:

if(!changedItems.isEmpty()){
            for (Integer changedItem : changedItems) {
                // restore to original color
            }
        }