2017-03-07 168 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 
    }