自定义适配器将数据反向

问题描述:

我正在使用自定义适配器和列表视图,但它显示的数据多次和数据反转,我的意思是,当我添加一行它显示在列表视图的顶部不是最后一个 当我用一个阵列适配器我没有发现任何问题 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(""); 
} 
+0

做一些事情,listView.setAdapter(itemsAdapter);在添加行之后,在onCreate&adapter.notifydatasetchanged()中,如果每次设置适配器,新行都会到达顶端,只需在发生任何更改后通知。 – 2014-08-29 06:23:15

+0

我把adapter.notifydatasetchanged(),但问题仍然存在 – Hanane 2014-08-29 06:30:03

+0

我的适配器每次添加一行时将信息放在顶部,当屏幕上的列表已满时,它在底部添加一行,最后一行变为在顶部 – Hanane 2014-08-29 06:31:06

问题解决了谢谢!

@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; 
} 
+0

我的答案和你的一样,对吧? – penkzhou 2014-08-29 07:15:30

+0

没有一点不同,而不是data.size-1我用位置替换它 – Hanane 2014-08-29 07:23:30

您在这里需要补充一点:

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