进度可见性在列表视图页脚中不起作用
Posted
技术标签:
【中文标题】进度可见性在列表视图页脚中不起作用【英文标题】:Progress visibility not working in list view footer 【发布时间】:2015-10-21 12:57:52 【问题描述】:我在列表视图中使用分页,当用户向下滚动到列表视图末尾时,我在列表视图页脚中显示进度条(小)。
LayoutInflater inflater = (LayoutInflater)getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.list_footer, null);
myListView.addFooter(view).
然后我将我的适配器设置如下
ProgressBar progressBar = (ProgressBar) getFooterView().findViewById(R.id.progressBar);
mAdapter = new MyAdapter(BaseActivity.getActivity(), 0, progressBar, myArrayList);
mList.setAdapter(mAdapter);
在我的适配器类中,我在 getView() 方法中设置进度条可见性,如下所示。
if(position == MAX_RECORDS)
progressBar.setVisibility(View.VISIBLE);
// Some code goes here.
else
progressBar.setVisibility(View.GONE);
但是当列表没有数据要获取时,ProgressBar 不会消失。请帮帮我。
【问题讨论】:
我认为您使用此方法的最佳解决方案。mListView.removeFooterView(v)
。并删除页脚视图。
感谢您的解决方案,但这也不起作用。
尝试在适配器类的活动中设置接口调用,然后将可见性设置为可见...
【参考方案1】:
最初将progressBar设置为可见状态并使用相同的代码本身。
【讨论】:
【参考方案2】:试试这个。这一行的改变会帮助你
ProgressBar progressBar = (ProgressBar)view.findViewById(R.id.progressBar);
而不是
ProgressBar progressBar = (ProgressBar) getFooterView().findViewById(R.id.progressBar);
【讨论】:
【参考方案3】:试试:
if(position == MAX_RECORDS-1)
位置从 0 开始
更新
只是想在这里理解您的代码:
if(position == MAX_RECORDS-1)
progressBar.setVisibility(View.VISIBLE);
// Some code goes here.
当显示最后一行时,上面的块将被执行。由于之前对所有行都调用了 getview,并且希望您使用的是 convertview,因此不会再次执行 else 块。
最终结果是:对话框将无限期可见。
如果我是对的,您想在加载数据时显示对话框并在加载完成时隐藏它。有两种情况:
一次性获取数据 在显示最后一行时获取数据。你能解释一下上面哪一个是真的吗?
【讨论】:
嘿@Kay 谢谢,我正在使用 MAX_RECORDS-1 已经忘记发帖了,你对这个问题还有其他想法吗? 在我的情况下,最后一个是正确的,我在显示最后一行时获取数据 因此,如果您每次调用获取 20 条记录,那么 max_record 应该是 20,然后是 40,然后是 60,依此类推 如果 max_record 正在更新,则意味着当没有数据可以获取时,进度不会消失。示例:如果您提取 80-100 条记录并且这是最后一条记录,那么(位置 == 99)上的进度对话框将可见,并且不会再有 getview 调用,因此永远不会不可见。 要克服同样的问题,您需要在服务器上拥有实际最大数据计数,即在我上面的示例中为 100。或者当服务器不再返回要获取的数据时,隐藏进度以上是关于进度可见性在列表视图页脚中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
Bootstrap 3 - 页脚中的链接在移动版本上不起作用