向上滚动时 Textview 重置为旧值
Textview resets to old value when scrolling up
我正在创建列表视图。我正在使用自定义适配器填充列表视图。在我的列表视图中有一个文本视图小部件。当我重置该文本视图的值时,它显示正常。然后,我向下滚动以将新值添加到 listView 中。但是当我向上滚动时,文本视图小部件会重置为旧的填充值。
我如何才能持久地保留我设定的新价值?
这是我的列表视图适配器 class 的代码,我在其中将值填充到我的列表视图中。我在触发事件的列表视图中单击 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;
}
}
我通过在上述适配器 class 的 getView() 参数中获取 convertView 值并通过它访问我的列表视图的文本视图小部件来重置列表视图的文本视图的值。然后,我将其设置为值 999(例如目的)。现在,我向下滚动以获得更多新的 listView 项目。但是,在向上滚动时,我为旧项目设置的新值 (999) 消失了。
请帮助我。
我自己做过测试。 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();
}
});
我正在创建列表视图。我正在使用自定义适配器填充列表视图。在我的列表视图中有一个文本视图小部件。当我重置该文本视图的值时,它显示正常。然后,我向下滚动以将新值添加到 listView 中。但是当我向上滚动时,文本视图小部件会重置为旧的填充值。 我如何才能持久地保留我设定的新价值? 这是我的列表视图适配器 class 的代码,我在其中将值填充到我的列表视图中。我在触发事件的列表视图中单击 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;
}
}
我通过在上述适配器 class 的 getView() 参数中获取 convertView 值并通过它访问我的列表视图的文本视图小部件来重置列表视图的文本视图的值。然后,我将其设置为值 999(例如目的)。现在,我向下滚动以获得更多新的 listView 项目。但是,在向上滚动时,我为旧项目设置的新值 (999) 消失了。
请帮助我。
我自己做过测试。 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();
}
});