gpt4 book ai didi

java - 使用 ViewTreeObserver 我在 RecyclerView.Adapter 内的 MaterialTextView 中添加 setMaxLines 和 setEllipsize

转载 作者:行者123 更新时间:2023-12-01 17:51:20 24 4
gpt4 key购买 nike

  • 我在RelativeLayout内设置了MaterialTextView,并以编程方式为每个设备设置了不同的RelativeLayout大小。

    <
  • 然后我使用 ViewTreeObserverMaterialTextView 中设置 setMaxLinessetEllipsize 但我面临使用 RecyclerView.Adapter 在 MaterialTextView 中显示文本时出现一些问题。

  • 我正在使用加载更多RecyclerView,我正在获取所有数据,然后在列表中自动显示文本,并通知数据适配器然后显示文本。

  • 不显示列表中 MaterialTextView 内的文本

  • 手机锁定打开/关闭,然后在 MaterialTextView 中显示数据

在fragment中设置recyclerview

recyclerView = view.findViewById(R.id.recyclerView_sub_category);
recyclerView.setHasFixedSize(true);
final LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());
recyclerView.setLayoutManager(layoutManager);

适配器代码

public class SubCategoryAdapter extends RecyclerView.Adapter {

private final int VIEW_TYPE_LOADING = 0;
private final int VIEW_TYPE_ITEM = 1;
private final int VIEW_TYPE_QUOTES = 2;

@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
if (viewType == VIEW_TYPE_ITEM) {
other data load
} else if (viewType == VIEW_TYPE_QUOTES) {
View v = LayoutInflater.from(activity).inflate(R.layout.quotes_adapter, parent, false);
return new Quotes(v);
} else if (viewType == VIEW_TYPE_LOADING) {
progressbar load
}
return null;
}

@Override
public void onBindViewHolder(@NonNull final RecyclerView.ViewHolder holder, @SuppressLint("RecyclerView") final int position) {

if (holder.getItemViewType() == VIEW_TYPE_ITEM) {

final ViewHolder viewHolder = (ViewHolder) holder;

// ------------- code -----

} else if (holder.getItemViewType() == VIEW_TYPE_QUOTES) {

final Quotes quotes = (Quotes) holder;

quotes.relativeLayout.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, columnWidth / 2));

Typeface typeface = Typeface.createFromAsset(activity.getAssets(), "text_font/" + subCategoryLists.get(position).getQuote_font());
quotes.textView.setTypeface(typeface);

quotes.textView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {

quotes.textView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
int noOfLinesVisible = quotes.textView.getHeight() / quotes.textView.getLineHeight();

quotes.textView.setMaxLines(noOfLinesVisible);
quotes.textView.setEllipsize(TextUtils.TruncateAt.END);

quotes.textView.setText(subCategoryLists.get(position).getStatus_title());
}
});


}
}

@Override
public int getItemCount() {
return subCategoryLists.size() + 1;
}

@Override
public int getItemViewType(int position) {
if (position != subCategoryLists.size()) {
if (subCategoryLists.get(position).getStatus_type().equals("quote")) {
return VIEW_TYPE_QUOTES;
} else {
return VIEW_TYPE_ITEM;
}
} else {
return VIEW_TYPE_LOADING;
}
}

public class Quotes extends RecyclerView.ViewHolder {

private RelativeLayout relativeLayout;
private MaterialTextView textView;

public Quotes(@NonNull View itemView) {
super(itemView);

textView = itemView.findViewById(R.id.textView_quotes_adapter);
relativeLayout = itemView.findViewById(R.id.rel_quotes_adapter);

}
}
}

最佳答案

我不完全确定您遇到的问题。但是,我认为我在您的代码中发现了一些问题。

我在设置 RecyclerView 时遇到的第一个问题是设置由以下内容固定的布局大小。

recyclerView.setHasFixedSize(true);

看起来您正在动态更改项目布局大小。因此,您需要在设置 RecyclerView 时删除上面的行。

我看到的第二个问题是,ViewHolder 中没有 QuotetextView_category。因此,以下内容应该引发错误。

quotes.textView_category.setText(subCategoryLists.get(position).getCategory_name());

关于java - 使用 ViewTreeObserver 我在 RecyclerView.Adapter 内的 MaterialTextView 中添加 setMaxLines 和 setEllipsize,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60790803/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com