Hanane
Hanane

Reputation: 484

custom adapter is putting data inversly

i'm using a custom adapter and a list view but it's showing the data multiple times and the data are inversed, i mean that when i add a row it show up on top of the list view not the last one when i used an array adapter i didn't find any problem plz help here's my code:

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Locale;

import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.TextUtils;
import android.text.style.ForegroundColorSpan;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;

public class ListViewRowChatAdapter extends ArrayAdapter<Spannable> {

    Context context;
   int layoutResourceId;

   ArrayList<Spannable> data=new ArrayList<Spannable>();

   public ListViewRowChatAdapter(Context context, int layoutResourceId, ArrayList<Spannable> data) {
       super(context, layoutResourceId, data);
       this.layoutResourceId = layoutResourceId;
       this.context = context;
       this.data = data;
     ;
   }

   @Override
   public View getView(int position, View convertView, ViewGroup parent) {
       View row = convertView;
       ImageHolder holder = null;

       if(row == null)
       {
           LayoutInflater inflater = ((Activity)context).getLayoutInflater();
           row = inflater.inflate(layoutResourceId, parent, false);

           Spannable tx=data.get(data.size()-1);

           holder = new ImageHolder();
           holder.txtTitle = (TextView)row.findViewById(R.id.text_chat);
           holder.txtTitle.setText(tx);

           row.setTag(holder);
       }
       else
       {
           holder = (ImageHolder)row.getTag();
       }

       return row;
   }

   static class ImageHolder
   {
       TextView txtTitle;
   }
}





    list = new ArrayList<Spannable>();
    itemsAdapter =new ListViewRowChatAdapter(this, R.layout.chat_shape, list);
    listView = (ListView) findViewById(android.R.id.list);
    listView.setAdapter(itemsAdapter);


public void SendChat(View v)
{
    Spannable text = et_chatInput.getText();
        if(text.length() > 0)
        {
            itemsAdapter.add(text);

        }

    et_chatInput.setText("");
}

Upvotes: 0

Views: 84

Answers (2)

penkzhou
penkzhou

Reputation: 1210

You need add something here:

   if(row == null)
   {
       LayoutInflater inflater = ((Activity)context).getLayoutInflater();
       row = inflater.inflate(layoutResourceId, parent, false);


       holder = new ImageHolder();
       holder.txtTitle = (TextView)row.findViewById(R.id.text_chat);
       // remove code here
       row.setTag(holder);
   }
   else
   {
       holder = (ImageHolder)row.getTag();
   }
      // add code here
       Spannable tx=data.get(data.size()-1);
       holder.txtTitle.setText(tx);

Upvotes: 1

Hanane
Hanane

Reputation: 484

Problem solved thank you!

@Override
 public View getView(int position, View convertView, ViewGroup parent) {
   View row = convertView;
   ImageHolder holder = null;

   if(row == null)
   {
       LayoutInflater inflater = ((Activity)context).getLayoutInflater();
       row = inflater.inflate(layoutResourceId, parent, false);



       holder = new ImageHolder();
       holder.txtTitle = (TextView)row.findViewById(R.id.text_chat);


       row.setTag(holder);
   }
   else
   {
       holder = (ImageHolder)row.getTag();
   }

Spannable tx=data.get(position);
holder.txtTitle.setText(tx);
   return row;
}

Upvotes: 0

Related Questions