自定义适配器将数据反向
问题描述:
我正在使用自定义适配器和列表视图,但它显示的数据多次和数据反转,我的意思是,当我添加一行它显示在列表视图的顶部不是最后一个 当我用一个阵列适配器我没有发现任何问题 plz帮助 这里是我的代码:自定义适配器将数据反向
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("");
}
答
问题解决了谢谢!
@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;
}
答
您在这里需要补充一点:
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);
+0
现在每次我以前都添加一行成为相同的 – Hanane 2014-08-29 06:34:24
做一些事情,listView.setAdapter(itemsAdapter);在添加行之后,在onCreate&adapter.notifydatasetchanged()中,如果每次设置适配器,新行都会到达顶端,只需在发生任何更改后通知。 – 2014-08-29 06:23:15
我把adapter.notifydatasetchanged(),但问题仍然存在 – Hanane 2014-08-29 06:30:03
我的适配器每次添加一行时将信息放在顶部,当屏幕上的列表已满时,它在底部添加一行,最后一行变为在顶部 – Hanane 2014-08-29 06:31:06