ListView Returns 相同的数据

ListView Returns The Same Data

我使用 Parse 在我的应用程序中进行了一次小型聊天。我似乎 运行 遇到的唯一问题是当我写了两次消息时:

http://imgur.com/kD7Wjcv,KLPGcPH#0

正如您在两张照片中看到的那样,这将使两个聊天帖子显示相同的消息。我想知道我可能做错了什么?这是我认为涉及的代码:

MainActivity.java

public void onClick(View v){

    TimelineBaseAdapter myAdapter = new TimelineBaseAdapter(context, myList);

    lv = (ListView)findViewById(R.id.timelineListView);
    lv.setAdapter(new TimelineBaseAdapter(context, myList));

    EditText et = (EditText)findViewById(R.id.editText);

    String post = et.getText().toString();

    ParseObject po = new ParseObject("Posts");
    po.put("Comments", post);
    po.saveInBackground();

    this.retrievedPost = po.getString("Comments");

    getDataInList();

    myAdapter.notifyDataSetChanged();

}

private void getDataInList(){

   TimelineListData tld = new TimelineListData();
   tld.setPost(retrievedPost);

   myList.add(tld);

}

}

TimelineBaseAdapter.java

public class TimelineBaseAdapter extends BaseAdapter {

ArrayList<TimelineListData> myList = new ArrayList<>();
LayoutInflater inflater;
Context context;

public TimelineBaseAdapter(Context context, ArrayList myList){
    this.myList = myList;
    this.context = context;

    inflater = LayoutInflater.from(this.context);

}

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

    TimelineListData tld2 = getItem(position);

    String settingPost = tld2.post;

    MyViewHolder myViewHolder;

    if (convertView == null){

        convertView = inflater.inflate(R.layout.post, null);
        myViewHolder = new MyViewHolder();
        myViewHolder.chatpost = (TextView)convertView.findViewById(R.id.chatpost);
        convertView.setTag(myViewHolder);

    }

    else {

        myViewHolder = (MyViewHolder)convertView.getTag();

    }

    myViewHolder.chatpost.setText(settingPost);

    return convertView;

}

private static class MyViewHolder{
    TextView chatpost;

}
}

TimelineListData.java

public class TimelineListData {

static String post;

public String getPost() {

    ParseObject post = new ParseObject("Posts");

    return post.getString("Comments");
}

public void setPost(String post) {
    TimelineListData.post = post;
}
}

所有 help/suggestions 将不胜感激。提前致谢!

在 getView 中,更改

 TimelineListData tld2 = new TimelineListData();

 TimelineListData tld2 = getItem(position);

从ViewHolder模式来看,下面一行

 myViewHolder.chatpost = (TextView)convertView.findViewById(R.id.chatpost);

进入守卫:

  if (convertView == null)

之后
myViewHolder = new MyViewHolder();

您正在为列表视图设置两个不同的适配器

TimelineBaseAdapter myAdapter = new TimelineBaseAdapter(context, myList);

改变这个

lv.setAdapter(new TimelineBaseAdapter(context, myList));

lv.setAdapter(myAdapter);

感谢您的帮助,但问题是 TimelineListData.java 中的字符串 post 是静态的。当我删除静态时,它们不再重复相同的数据。