我知道你问这个问题已经有几年了,我希望你现在已经找到了答案,但我想无论如何我都会回答你的问题。
对于任何 android 设备,您拥有的 TextViews 和 SpanObjects 的数量都非常昂贵,并且每次加载它们不仅会导致延迟,而且可能会导致与 OOM 相关的崩溃(内存不足)。
解决这个问题的方法是使用 RecyclerView 和 CardView。首先,编写你的 RecyclerView 适配器。在这个类中,编写一个静态类来加载每张卡片中的所有 TextView 和其他项(卡片本质上是一个列表项)。这样,您的所有项目都在 OnCreate 上加载,并且不会连续生成。如果您使用片段,这将特别有用。此链接可能对您有用: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);
}
}
}