2017-04-21 38 views
0

我有一个recyclerview,我想动态地用数据绑定来更改recyclerview的每个项目的样式。用数据绑定更改Recyclerview的项目样式

这是我Recyclerview项目布局

<RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="@dimen/channel_priority_item_height" 
     android:background="@drawable/channel_item_bg" 
     android:paddingStart="@dimen/channel_priority_header_left_pad" 
     android:paddingEnd="@dimen/channel_priority_item_right_pad"> 
     <ImageView 
      android:id="@+id/preference_channel_image" 
      android:src="@drawable/empty_channel_drawable" 
      android:layout_width="@dimen/channels_item_width" 
      android:layout_height="@dimen/channels_item_height" 
      android:layout_centerVertical="true" 
      android:layout_alignParentStart="true" 
      android:layout_marginEnd="@dimen/channel_item_margin_end"/> 
     <RelativeLayout 
      android:id="@+id/preference_channel_switch_holder" 
      android:layout_width="48dp" 
      android:layout_height="48dp" 
      android:layout_centerVertical="true" 
      android:layout_alignParentEnd="true"> 
      <ImageView 
       android:id="@+id/preference_channel_switch" 
       android:layout_width="@dimen/channels_preference_switch_size" 
       android:layout_height="@dimen/channels_preference_switch_size" 
       android:layout_centerInParent="true" 
       android:padding="@dimen/switch_padding" 
       android:src="@drawable/switch_selected_bg" 
       android:background="@drawable/circle_button_bg" /> 
     </RelativeLayout> 
     <LinearLayout 
      android:orientation="vertical" 
      android:layout_toEndOf="@+id/preference_channel_image" 
      android:layout_toStartOf="@+id/preference_channel_switch_holder" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_centerVertical="true"> 
      <TextView 
       android:text="Some Header" 
       android:id="@+id/channel_name" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:textSize="@dimen/preference_channel_primary" 
       android:textColor="@color/white" 
       android:fontFamily="sans-serif"/> 
      <TextView 
       android:text="Some Description" 
       android:id="@+id/channel_description" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:textSize="@dimen/preference_channel_secondary" 
       android:textColor="@color/white_50" 
       android:fontFamily="sans-serif"/> 
     </LinearLayout> 
    </RelativeLayout> 

我想改变的每个项目风格在此布局,像布局等 应该在哪里绑定TextView的背景的文本颜色做完了?在适配器中还是在父代片段中?任何示例都会非常有帮助。 谢谢。

回答

1

模型类:

public class ColorObject extends BaseObservable { 

    int color = Color.BLACK; 

    public void setColor(int color) { 
     if (this.color==color) return; 
     this.color = color; 
     notifyPropertyChanged(BR.color); 
    } 

    @Bindable 
    public int getColor() { 
     return color; 
    } 
} 

不过,我不会建议只为颜色创建一个模型类。您可以在活动视图模型类中添加此Color对象。

适配器:

public class ListAdapter extends RecyclerView.Adapter<ListAdapter.ViewHolder> { 

    private ColorObject colorObject; 

    public ListAdapter(Context context){ 
     colorObject = new ColorObject(); 

    } 

    @Override 
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     ItemListBinding binding = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), R.layout.item_list, parent, false); 
     return new ViewHolder(binding); 
    } 

    @Override 
    public void onBindViewHolder(ViewHolder holder, int position) { 
     holder.bind(colorObject); 
    } 

    @Override 
    public int getItemCount() { 
     return 5; 
    } 

    public class ViewHolder extends RecyclerView.ViewHolder { 
     public ItemListBinding itemListBinding; 
     public ViewHolder(ItemListBinding itemBinding) { 
      super(itemBinding.getRoot()); 
      itemListBinding = itemBinding; 
     } 

     public void bind(ColorObject item) { 
      itemListBinding.setTextColor(item); 
      itemListBinding.executePendingBindings(); 
     } 
    } 
} 

item_list.xml:

<layout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto"> 

    <data> 
     <variable 
      name="textColor" 
      type="com.example.ColorObject"/> 
    </data> 

    <android.support.constraint.ConstraintLayout xmlns:tools="http://schemas.android.com/tools" 
     android:id="@+id/root" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

     <TextView 
      android:padding="@dimen/activity_horizontal_margin" 
      android:id="@+id/text" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:textColor="@{textColor.color}" 
      android:background="@color/colorPrimaryDark" 
      android:text="sjhfjsgjfhgjfhs" 
      app:layout_constraintBottom_toBottomOf="parent" 
      app:layout_constraintLeft_toLeftOf="parent" 
      app:layout_constraintRight_toRightOf="parent" 
      app:layout_constraintTop_toTopOf="parent" /> 

    </android.support.constraint.ConstraintLayout> 
</layout> 
相关问题