gpt4 book ai didi

android - 在 Android 中使用多个 SpanObjects 还是多个 TextViews 更好?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:43:57 25 4
gpt4 key购买 nike

我有一个 ListView,它有一个 TextView,每个 TextView 都有几个项目,每个项目都有一个简短的描述。为了对项目和描述应用不同的样式,我使用了多个跨度对象:ClickableSpanForegroundColorSpanBackgroundColorSpanAbsoluteSizeSpanStyleSpan

ListView 平均有 10 个 TextView,每个 TextView 有 10 对项目/描述,每对使用大约 6 SpanObject,因此每个 ListView 总共约 600 个 SpanObject。当用户单击其中一个项目时,ListView 被清除并再次重绘生成另一组 600 个 SpanObject

所以我想知道为每个项目和每个描述创建一个 TextView 并通过 XML 格式化它是否比使用 TextView 设置样式更好span,这样会有大约 200 个 TextView 而没有 SpanObject

请注意,我并没有从这种方法开始,因为 View 的层次结构树将变得更加复杂,并且 TextView 的创建成本高于 SpanObjects,但现在我看到了我正在创建的 SpanObject 的数量,我不确定哪个更好。我也在考虑开始编写回收机制,但不确定是否值得,或者这对 Android GC 来说应该不是问题。

最佳答案

我知道你问这个问题已经有几年了,我希望你现在已经找到了答案,但我想我还是会回答你的问题。

您拥有的 TextView 和 SpanObject 的数量对于任何 Android 设备来说都非常昂贵,并且每次加载它们不仅会导致延迟,而且可能会导致与 OOM 相关的崩溃(内存不足)。

解决这个问题的方法是使用 RecyclerView 和 CardView。首先,编写您的 RecyclerView 适配器。在此类中,编写一个静态类来加载每张卡片中的所有 TextView 和其他项目(卡片本质上是一个列表项)。这样,您的所有项目都在 OnCreate 上加载,而不是连续生成。如果您使用 fragment ,这将特别有用。此链接可能对您有用:http://www.binpress.com/tutorial/android-l-recyclerview-and-cardview-tutorial/156

这是一个带有静态类的 RecyclerView 适配器类的示例:

public class ContactAdapter extends RecyclerView.Adapter<ContactAdapter.ContactViewHolder> {

private List<ContactInfo> contactList;

public ContactAdapter(List<ContactInfo> contactList) {
this.contactList = contactList;
}

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

@Override
public void onBindViewHolder(ContactViewHolder contactViewHolder, int i) {
ContactInfo ci = contactList.get(i);
contactViewHolder.vName.setText(ci.name);
contactViewHolder.vSurname.setText(ci.surname);
contactViewHolder.vEmail.setText(ci.email);
contactViewHolder.vTitle.setText(ci.name + " " + ci.surname);
}

@Override
public ContactViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View itemView = LayoutInflater.
from(viewGroup.getContext()).
inflate(R.layout.card_layout, viewGroup, false);

return new ContactViewHolder(itemView);
}


//Static class that loads all card item components

public static class ContactViewHolder extends RecyclerView.ViewHolder {
protected TextView vName;
protected TextView vSurname;
protected TextView vEmail;
protected TextView vTitle;

public ContactViewHolder(View v) {
super(v);
vName = (TextView) v.findViewById(R.id.txtName);
vSurname = (TextView) v.findViewById(R.id.txtSurname);
vEmail = (TextView) v.findViewById(R.id.txtEmail);
vTitle = (TextView) v.findViewById(R.id.title);
}
}
}

关于android - 在 Android 中使用多个 SpanObjects 还是多个 TextViews 更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10109694/

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