2017-03-07 169 views
0
RecyclerView适配器上

我试图找到如何从Activity改变我RecyclerView适配器textViews,在我的活动我有两个小部件,如increment_text_sizedecrement_text_size,他们必须更改适配器textviews,的Android变化的TextView TEXTSIZE从活动

为实现到,我上的活动创建简单的监听器对其进行管理:

活动:

public interface IonChangeBookContentTextSize { 
    void incrementTextSize(); 

    void decrementTextSize(); 
} 

public static void setIonChangeBookContentTextSize(IonChangeBookContentTextSize l) { 
    ionChangeBookContentTextSize = l; 
} 

和点击后W idgets我用这个监听器适配器

活动:

@OnClick(R.id.decrement_text_size) 
public void decrement_text_size(View view) { 
    if (ionChangeBookContentTextSize != null) { 
     ionChangeBookContentTextSize.decrementTextSize(); 
    } 
} 

@OnClick(R.id.increment_text_size) 
public void increment_text_size(View view) { 
    if (ionChangeBookContentTextSize != null) { 
     ionChangeBookContentTextSize.incrementTextSize(); 
    } 
} 

现在适配器我使用这个监听

public class ShowBookContentsAdapter extends RecyclerView.Adapter<ShowBookContentsAdapter.ShowBookContentsViewHolder> { 
    private List<Contents> list; 
    private Context  context; 
    private static final int NOTE = 1; 
    public static IonChangeBottomViewVisibility ionChangeBottomViewvisibility; 
    private  ShowBookContentsViewHolder holder; 
    private  View       view; 

    public ShowBookContentsAdapter(List<Contents> items, Context mContext, IonChangeBottomViewVisibility mOnChangeBottomViewVisibility) { 
     list = items; 
     context = mContext; 
     ionChangeBottomViewvisibility = mOnChangeBottomViewVisibility; 
    } 

    @Override 
    public ShowBookContentsViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     int layout = -1; 
     switch (viewType) { 
      case 0: 
       layout = R.layout.item_book_content_paragraph; 
       break; 
      case 1: 
       layout = R.layout.item_book_content_heading_one; 
       break; 
     } 

     view = LayoutInflater.from(parent.getContext()).inflate(layout, parent, false); 
     holder = new ShowBookContentsViewHolder(view); 

     return holder; 
    } 

    @Override 
    public void onBindViewHolder(ShowBookContentsViewHolder holder, final int position) { 
     switch (list.get(position).getContentType()) { 
      case 0: 
       implementingHeadingParagraphView(holder, position); 
       break; 
      case 1: 
       implementingHeadingOneView(holder, position); 
       break; 
     } 
    } 

    private void implementingHeadingParagraphView(final ShowBookContentsViewHolder holder, final int position) { 
     Utils.overrideFonts(context, holder.book_content_paragraph, PersianFontType.SHABNAM); 

     holder.book_content_paragraph.setText(Html.fromHtml(list.get(position).getContent())); 

     ActivityShowBookContent.setIonChangeBookContentTextSize(new ActivityShowBookContent.IonChangeBookContentTextSize() { 
      @Override 
      public void incrementTextSize() { 
       holder.book_content_paragraph.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18); 
      } 

      @Override 
      public void decrementTextSize() { 
       holder.book_content_paragraph.setTextSize(TypedValue.COMPLEX_UNIT_SP, 12); 
      } 
     }); 
    } 

    @Override 
    public int getItemViewType(int position) { 
     return list.get(position).getContentType(); 
    } 

    @Override 
    public int getItemCount() { 
     return list.size(); 
    } 

    public int getItemPosition(int itemId) { 
     return itemPositions.get(itemId); 
    } 

    public class ShowBookContentsViewHolder extends RecyclerView.ViewHolder { 
     @Nullable 
     @BindView(R.id.book_content_paragraph) 
     TextView book_content_paragraph; 

     @Nullable 
     @BindView(R.id.book_content_heading_one) 
     TextView book_content_heading_one; 

     public ShowBookContentsViewHolder(View view) { 
      super(view); 
      ButterKnife.bind(this, view); 
     } 
    } 
} 

实现这个监听器:

ActivityShowBookContent.setIonChangeBookContentTextSize(new ActivityShowBookContent.IonChangeBookContentTextSize() { 
    @Override 
    public void incrementTextSize() { 
     holder.book_content_paragraph.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18); 
    } 

    @Override 
    public void decrementTextSize() { 
     holder.book_content_paragraph.setTextSize(TypedValue.COMPLEX_UNIT_SP, 12); 
    } 
}); 

implementingHeadingParagraphView方法工作的当前位置,而不是为recyclerview适配器上的所有行,我怎么能解决这个问题?

+1

你必须保存在数据模型类TEXTSIZE在点击的位置,然后执行你的意见时,只需使用NotifyItemChanged() –

+0

并设置文字大小,从数据模型。 – faranjit

+0

@faranjit'notifyItemChanged'只适用于当前位置并非所有适配器行 –

回答

1

您不必创建一个监听器用于此目的。您应该在适配器中保存一个名为textSize的字段。然后,只要你想从你的活动中设置此。

public class ShowBookContentsAdapter extends RecyclerView.Adapter<ShowBookContentsAdapter.ShowBookContentsViewHolder> { 

    private int textSize; 

    // constructor etc. 

    @Override 
    public ShowBookContentsViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 

     final View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_book_content_paragraph, parent, false); 
     final ShowBookContentsViewHolder holder new ShowBookContentsViewHolder(view); 

     return holder; 
    } 

    @Override 
    public void onBindViewHolder(ShowBookContentsViewHolder holder, final int position) { 
     implementingHeadingParagraphView(holder, position); 
    } 

    private void implementingHeadingParagraphView(final ShowBookContentsViewHolder holder, final int position) { 
     Utils.overrideFonts(context, holder.book_content_paragraph, PersianFontType.SHABNAM); 

     holder.book_content_paragraph.setTextSize(TypedValue.COMPLEX_UNIT_SP, textSize); 

     holder.book_content_paragraph.setText(Html.fromHtml(list.get(position).getContent())); 

    } 

    public void setTextSizes(int textSize) { 
     this.textSize = textSize; 
     notifyDataSetChanged(); 
    } 

    //... other adapter methods 

    public class ShowBookContentsViewHolder extends RecyclerView.ViewHolder { 
     @Nullable 
     @BindView(R.id.book_content_paragraph) 
     TextView book_content_paragraph; 

     @Nullable 
     @BindView(R.id.book_content_heading_one) 
     TextView book_content_heading_one; 

     public ShowBookContentsViewHolder(View view) { 
      super(view); 
      ButterKnife.bind(this, view); 
     } 
    } 

调用该从你的活动

showBookContentsAdapter.setTextSizes(18); 
+0

非常感谢您的先生 –

0

你必须调用从您notifydatasetchanged活动

1.首先,节省常数变量,如果字体大小的临时或使用共享偏好,如果需要在应用程序的整个生命周期

  • 让您的活动的方法来保存字体大小

    private void saveFontSize(boolean isFont){ 
    IS_LARGE_FONT= isFont; 
    recyclerView.post(new Runnable(){ 
    adapter.notifyDataSetChanged(); 
    }); 
    } 
    
  • 在您的适配器类查一下bindholder

    该值
    if(IS_LARGE_FONT) 
    { 
    //set large font 
    } 
    else{ 
    // set small font 
    }