1

リストビューのビューホルダーにインフレータの問題があります。ビューホルダーが実装されていると、間違ったインフレータが取得されるため、メッセージが間違って表示されます。(画像10で、メッセージは私からではなく、スクロールするたびに間違ったメッセージが変更され、インフレータがランダムにかかるかのように7,4またはその他になります)

私は2つの異なるインフレータを持っています。1つはプロファイルイメージを表示するもので、もう1つは私のものです。

コードは次のとおりです。

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

         ViewHolder viewHolder; 
        if (convertView == null) {


        if(messageList.get(position).getSenderRealId() != relevantId)
        {
            convertView = getLayoutInflater().inflate(R.layout.message_detail_row_my_inflater, parent, false);
        }else{
            convertView = getLayoutInflater().inflate(R.layout.message_detail_row_their_inflater, parent, false);
        }

        viewHolder = new ViewHolder();
        viewHolder.messageDateText = (CustomFontTextView) findViewById(R.id.messageDateText);
        viewHolder.profileImageView = (SquareImageView) findViewById(R.id.profileImageView);
        viewHolder.messageBubbleLayout =  (LinearLayout) convertView.findViewById(R.id.messageBubbleLayout);
        viewHolder.messageText = (CustomFontTextView) viewHolder.messageBubbleLayout.findViewById(R.id.message_text);
        viewHolder.messageHourText = (CustomFontTextView) viewHolder.messageBubbleLayout.findViewById(R.id.messageHourText);

        convertView.setTag(viewHolder);
        }else{
            viewHolder = (ViewHolder)convertView.getTag();
        }

        viewHolder.messageText.setText(messageList.get(position).getMessage());
        viewHolder.messageHourText.setText(Constants.hourFormat.format(messageList.get(position).getSendTime()));



        return convertView;

    }

そして viewHolderClass :

static class ViewHolder {
    CustomFontTextView messageDateText;
    SquareImageView profileImageView;
    LinearLayout messageBubbleLayout;
    CustomFontTextView messageText;
    CustomFontTextView messageHourText;

}

現在、私は messageHour と messageText のみを設定していますが、画像を除くすべてのコンポーネントは、問題の原因とは思わない linearlayout(messageBubbleLayout) 内にあります。

ご協力いただきありがとうございます

ここに画像の説明を入力

4

1 に答える 1

0

ここでは 2 つの異なるレイアウトを使用しているため、Android のメカニズムを使用して convertviews を適切に再利用する必要があります。

ここでチュートリアルをチェックしてください:

http://antoine-merle.com/blog/2013/06/11/make-a-multiple-view-type-adapter-with-annotations/

あなたの場合、ビューには「my」と「their」の2つのタイプしかないため、getViewTypeCount()メソッドをオーバーライドして2を返しgetItemViewType()、位置に基づいて適切なタイプを返します。

于 2014-09-30T13:58:03.277 に答える