向上滚动时,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(在同一缓冲区上具有新值)将缓冲区恢复为旧值

滚动时,Android Listview重置更改

UITableView 在滚动时重置 ContentOffset

在基本适配器中滚动后,TextView 值更改回之前的值

当我第二次关注 Textview 时,文本在 textView 中向上移动