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 是静态的。当我删除静态时,它们不再重复相同的数据。
我使用 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 是静态的。当我删除静态时,它们不再重复相同的数据。