目標:アプリケーションは、ユーザーが表示されたアイテムの数量を追加できるようにする必要があります。すべての可能な製品のリストから製品の順序を作成することを考えてください。製品のコード リストは非常に長くなる可能性があります (数万またはそれ以上のアイテムなど)。一方で、オーダーの選択数は非常に少ない(最大で数~数十)。
実装済み: これまでのところ、データベースから情報にアクセスするための とコンテンツ プロバイダーをOrderOverviewActivity
実装しました。LoaderManager
私はそれを使用して、そのメソッドとメソッドMyCursorAdapter
を拡張CursorAdapter
およびオーバーライドします。newView()
bindView()
次のように、子ビューへの参照と、カーソル位置から抽出された値のバッファをnewView()
含むインスタンスも作成します。ViewHolder
private static class ViewHolder {
public TextView code;
public CharArrayBuffer codeBuffer = new CharArrayBuffer(20);
public TextView name;
public CharArrayBuffer nameBuffer = new CharArrayBuffer(100);
public TextView quantity;
public CharArrayBuffer quantityBuffer = new CharArrayBuffer(10);
}
そのnewView()
ように見えます:
public View newView(Context context, Cursor cursor, ViewGroup parent) {
View v = mInflater.inflate(mLayout, parent, false);
ViewHolder holder = new ViewHolder();
holder.code = (TextView) v.findViewById(R.id.code);
holder.name = (TextView) v.findViewById(R.id.name);
holder.quantity = (TextView) v.findViewById(R.id.quantity);
v.setTag(holder);
return v;
}
はbindView()
ホルダー バッファを使用して、多くのString
オブジェクトの作成を回避します。
public void bindView(View view, Context context, Cursor cursor) {
ViewHolder holder = (ViewHolder) view.getTag();
cursor.copyStringToBuffer(1, holder.codeBuffer); // ProductTable.COLUMN_CODE
cursor.copyStringToBuffer(2, holder.nameBuffer); // ProductTable.COLUMN_NAME
holder.code.setText(holder.codeBuffer.data, 0, holder.codeBuffer.sizeCopied);
holder.name.setText(holder.nameBuffer.data, 0, holder.nameBuffer.sizeCopied);
// The quantity (v for value) from the HashMap<String, String>.
String v = mQuantity.get(String.valueOf(holder.codeBuffer.data, 0,
holder.codeBuffer.sizeCopied));
if (v != null) {
holder.quantity.setText(v);
holder.quantity.setBackgroundColor(Color.DKGRAY);
}
else {
holder.quantity.setText(null);
holder.quantity.setBackgroundColor(Color.TRANSPARENT);
}
}
質問の核心:HashMap<String, String>
を介してオブジェクトから数量が抽出されることに注意してくださいString.valueOf(data, 0, data.size)
。後でガベージコレクションを行う必要がある文字列オブジェクトを作成するため、パフォーマンスが損なわれるのではないかと心配しています。マップから数量 TextView 値を設定するより良い方法はありますか?