向上滚动时,Textview 重置为旧值
Posted
技术标签:
【中文标题】向上滚动时,Textview 重置为旧值【英文标题】:Textview resets to old value when scrolling up 【发布时间】:2015-07-29 09:43:37 【问题描述】:我正在创建一个列表视图。我正在使用自定义适配器填充列表视图。在我的列表视图中有一个文本视图小部件。当我重置该文本视图的值时,它显示正常。然后,我向下滚动以将新值放入 listView。但是当我向上滚动文本视图小部件时,它会重置为旧的填充值。 我如何才能坚持不懈地保留我设定的新价值? 这是我的列表视图适配器类的代码,我将值填充到我的列表视图中。我正在单击列表视图中的 imageview,它触发事件以将新文本值设置为列表视图中的文本视图小部件。
private class MyListAdapter extends ArrayAdapter<CommentInfo>
public MyListAdapter()
super(Comment.this, R.layout.listview_xml, myComments);
@Override
public View getView(final int position, final View convertView, final ViewGroup parent)
itemView = convertView;
if(itemView == null)
itemView = getLayoutInflater().inflate(R.layout.listview_xml, parent, false);
CommentInfo currentComment = myComments.get(position);
TextView tvLikes = (TextView) itemView.findViewById(R.id.tvLikes);
tvLikes.setText(currentComment.likes);
ImageView ivLikes = (ImageView) itemView.findViewById(R.id.likeBtn);
ivLikes.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
likePosition = position;
TextView tvlikes1 = (TextView) convertView.findViewById(R.id.tvLikes);
// Here, i will get the correct value from DB and set it.
// I am setting 999 for sample purpose
tvlikes1.setText("999");
);
return itemView;
我通过在上面的适配器类的 getView() 参数中获取 convertView 值并通过它访问我的 listview 的 textview 小部件来重置 listview 的文本视图的值。然后,我将其设置为值 999(例如目的)。现在,我向下滚动以获取更多新的 listView 项目。但是,在向上滚动时,我设置为旧项目的新值 (999) 会消失。
请帮帮我。
【问题讨论】:
为什么你必须使用 findViewById() 在 OnClick() 方法中再次找到你的 TextView。您可以重用 tvLikes(尽管将其设为最终版本)而不是 tvLikes1。 托尼,我尝试了 tvLikes 本身。是的,我不需要使用 findViewById()。但这并不能解决我在文本视图小部件中将新值重置回旧值的问题。 【参考方案1】:我自己做了一个测试。 ListView 适配器将始终从 myComments 列表中获取值,因此为了根据需要更新 TextView,您必须这样做:
ivLikes.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
likePosition = position;
myComments.get(position).setLikes("999");//Assume that your CommentInfo's likes is a string.
notifyDataSetChanged();
);
【讨论】:
以上是关于向上滚动时,Textview 重置为旧值的主要内容,如果未能解决你的问题,请参考以下文章
为啥当我在同一行中编辑另一个单元格时,此数据表单元格会恢复为旧值?
C ++ - ReadProcessMemory 到缓冲区,WriteProcessMemory(在同一缓冲区上具有新值)将缓冲区恢复为旧值