【问题标题】: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)。并删除页脚视图。
  • 感谢您的解决方案,但这也不起作用。
  • 尝试在适配器类的活动中设置接口调用,然后将可见性设置为可见...

标签: android android-listview android-progressbar


【解决方案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。或者当服务器不再返回要获取的数据时,隐藏进度
      猜你喜欢
      • 1970-01-01
      • 2013-04-17
      • 2014-09-05
      • 2011-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-06
      相关资源
      最近更新 更多