あなたがこの質問をしてから数年経っていることは知っていますが、今までに答えを見つけていただければ幸いですが、とにかくあなたの質問に答えたいと思いました.
あなたが持っている TextViews と SpanObjects の量は、あらゆる Android デバイスにとって信じられないほど高価であり、それらを毎回ロードすると、遅延が発生するだけでなく、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);
}
}
}