Reputation: 484
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
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
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