在列表视图中刷新搜索栏 + 文本视图
Posted
技术标签:
【中文标题】在列表视图中刷新搜索栏 + 文本视图【英文标题】:Refresh seekbar + textview in a listview 【发布时间】:2011-09-11 23:19:02 【问题描述】:我有一个列表视图,其中每个文本视图都应该显示搜索栏的值。我已经让它工作了,一旦为搜索栏调用 onStopTrackingTouch,我就会更新相应的文本视图。我希望在用户移动搜索栏时发生更改,但我在执行相同操作时遇到了麻烦,因为列表视图不会经常刷新。
实现这一目标的理想方法是什么?
【问题讨论】:
【参考方案1】:您可以拨打notifyDataSetChanged
在OnSeekBarChangeListener
希望对您有所帮助。
【讨论】:
我试过了,但它似乎将焦点从搜索栏上移开,导致用户无法搜索 好的,明白了。我在我的适配器中尝试了这个东西,并在 getView 方法中为每个 seekBar 调用了 setOnSeekBarChangeListener。抱歉代码格式错误,不知道如何在评论中做。希望这能回答你的问题。 public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) TextView mProgressText = (TextView) ((View)seekBar.getParent()).findViewById(R.id.progress); mProgressText.setText(进度 + ""); 【参考方案2】:这就是我所做的,我在 getView 之外定义了一个触摸侦听器,将其设置为 getview 中 seekbar 的 TouchListener。 TouchListener 将视图作为参数返回,我得到了视图的父视图,然后对 tectview 进行了 findViewByID 搜索并更新了它。
【讨论】:
如果您的列表视图中的行数超过 15 行会怎样? Ravi,你能否为此添加代码快照排序。更新您的上述答案,以便人们通过示例演示了解人们可能会感谢 U 的 Grete Work of U。因为大多数人在滚动 lis 时遇到问题,它无法保持以前的状态。 +Milind 会尽快提出来的 :-) @AlexSanchez,我换了工作,需要花一些时间寻找。【参考方案3】:我找到了实现这种行为的方法,当我覆盖 ArrayAdapter 的 getView()
方法时,我将 SeekBar 标记属性设置为当前项目的位置。所以它可以帮助我在执行onProgressChanged(...)
回调时提取相应的项目。同时它让我可以更新适配器中包含的对应对象。
sbProgress.setTag(position);
sbProgress.setOnSeekBarChangeListener(new OnSeekBarChangeListener()
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser)
View view = (View) seekBar.getParent();
if(view != null)
TextView tvProgress = (TextView)view.findViewById(R.id.tv_porcentaje_numerico_obtenido);
tvProgress.setText(progress + "%");
MyAdapter.this.getItem((Integer)seekBar.getTag()).setProgres(progress);
@Override
public void onStartTrackingTouch(SeekBar seekBar)
@Override
public void onStopTrackingTouch(SeekBar seekBar)
);
这是解释我的意思的图片
我希望这对某人有所帮助。
【讨论】:
您的解决方案运行良好。我的问题是我已经使用我的适配器来获得这个功能,我已经运行了所有的代码 sn-ps 除了 MyAdapter.this.getItem((Integer)seekBar.getTag()).setProgres(progress); .setprogress 是 android studio 无法解决的。我想我会更新我的 getIem 方法,但我无法更新。你能帮我看看你的 getItem 方法吗?以上是关于在列表视图中刷新搜索栏 + 文本视图的主要内容,如果未能解决你的问题,请参考以下文章