0

単純なリスト ビューの BaseAdapter に問題があります。リストビューでのパフォーマンスを向上させるために、 getView メソッドでホルダーを使用したいと考えています。しかし、ホルダーを使用すると、アイテムがすべて混同されます。リストビュー内のアイテムの数は正しいですが、順序が間違っています。前もって感謝します。これは getView 内の私のコードです:

    ChatRowView holder;
    ChatActivity.chatObject currentChatObject = getItem(position);
    if(convertView == null)
    {
        holder = new ChatRowView();
        convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.chat_row, null);
        holder.chatComponent = new ChatComponent(mContext, currentChatObject.isLeft, currentChatObject.extraType, currentChatObject.message);           

        holder.chatComponent.tvName.setText(currentChatObject.name);
        holder.chatComponent.tvTime.setText(currentChatObject.time);
        load("some picture", holder.chatComponent.ivUser);

        if(currentChatObject.extraType != ExtraContentView.eChatExtraContentType.NONE)
        {
            if(currentChatObject.extraType != ExtraContentView.eChatExtraContentType.GAME)
            {
                App.loadImage(teamsBaseUrl + "132" + "_70x70.png", holder.chatComponent.extraContentView.ivTeamLogo);
            }
            else
            {
                App.loadImage(teamsBaseUrl + "132" + "_70x70.png", holder.chatComponent.extraContentView.ivHomeTeamLogo);
                App.loadImage(teamsBaseUrl + "132" + "_70x70.png", holder.chatComponent.extraContentView.ivAwayTeamLogo);
            }
        }
        ((RelativeLayout)convertView).addView(holder.chatComponent);        
        convertView.setTag(holder);

        extraButtonsListener(holder.chatComponent);
    }
    else
    {
        holder = (ChatRowView)convertView.getTag();
    }                   
    return convertView;
4

2 に答える 2

0

パターンの使用法を誤解していますviewHolderfindViewByIdスクロールするたびに操作を回避するために、効率上の理由から考えられました。set* 操作は常に実行する必要があります。実装を考えると、常に同じ値が表示されるはずです(最初の値)

于 2013-07-11T08:12:06.903 に答える