簡體   English   中英

Android 從 Activity 更改 RecyclerView 適配器上的 TextView textSize

[英]Android change TextView textSize on RecyclerView adapter from Activity

我試圖找到如何從Activity更改我的RecyclerView適配器textViews ,在我的活動中,我有兩個小部件,例如increment_text_sizedecrement_text_size ,它們必須更改適配器文本視圖,

為此,我在活動上創建了簡單的偵聽器來管理它們:

活動:

public interface IonChangeBookContentTextSize {
    void incrementTextSize();

    void decrementTextSize();
}

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

單擊小部件后,我在適配器上使用此偵聽器

活動:

@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 適配器上的所有行,我該如何解決這個問題?

您不必為此目的創建偵聽器。 您應該在適配器中保存一個名為 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);

您必須從您的活動中調用 notifydatasetchanged

1.首先,將字體大小臨時保存在常量變量上,或者在應用程序的整個生命周期中根據需要使用共享首選項

  1. 在您的活動中創建一種方法來保存字體大小

    private void saveFontSize(boolean isFont){ IS_LARGE_FONT= isFont; recyclerView.post(new Runnable(){ adapter.notifyDataSetChanged(); }); }
  2. 在您的適配器類中,只需檢查 bindholder 中的值

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM