【发布时间】: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()。但这并不能解决我在文本视图小部件中将新值重置回旧值的问题。
标签: android-listview textview android-adapter android-scrollview android