0

ビュー、ImageView、TextView などを保存しているビューホルダー内に、プロジェクトの ListView 用にいくつかの ViewHolders を作成しています。

ビューホルダーのクラスでは、アイテムのステータス、IE からビューを構成するメソッドも作成しました。

チャット メッセージのリスト アイテムの場合、メッセージの送信者用の textview を含むビューホルダー、彼のアバターを含む imageview、アプリのリソースからの画像を含む imageview を使用して、メッセージを音声メッセージ、ビデオ メッセージ、テキスト メッセージとして識別します。すぐ。同じ ViewHolder に、次のようなメソッドもあります。

configureViewFromMessage(MessageSender sender, Message message)

Sender および Message POJO モデルからアバター、送信者名、およびメッセージ タイプを構成します。

編集: これをよりよく説明するために、アダプターの例を追加しています。

public View getView(int position, View convertView, ViewGroup viewGroup) {
    ContactViewHolder cvh;

    if (convertView != null) {
        cvh = (ContactViewHolder) convertView.getTag();
    } else {
        convertView = InflateUtils.inflate(mContext, R.layout.contact_list_item);
        convertView = InflateUtils.inflate(mContext, R.layout.contact_list_item_container);
        cvh = new ContactViewHolder(innerView);
        convertView.setTag(cvh);
    }

    /* Getting message */
    Message message = getItem(position);
    MessageSender sender = message.getSender();

    /* View settings */
    cvh.configureViewFromMessage(sender, message, mContext);
        /* Context is used to reach App's Resources */

    return convertView;
}

質問は次のとおりです。

  1. ViewHolder 内にこれらのメソッド (多くの場合) があると、パフォーマンスの問題が発生する可能性がありますか?
  2. 厳密に必要なフィールドのみを ViewHolders に保持し、メソッドを保持する必要はありませんか?
4

1 に答える 1

2

ご存知のように、既に作成されたビューを保存するなどのパフォーマンスViewHolderを最適化するために使用されListView、スクロール後にこのビューを取得し、その画像やテキスト、またはあなたが持っているビューを変更して、別の ListItem として元に戻します。したがって、findViewById()毎回新しいビューを使用したり作成したりすることは避けられます。

私の意見では、いくつかのメソッドを配置しても、それらのメソッドが正しく記述されていない限り、ViewHolderパフォーマンスの問題は発生しないはずです。新しいビューの作成を避け、毎回ListViews使用する限り、問題ありません。findViewById()

于 2013-08-26T12:35:04.177 に答える