【问题标题】:Call Chris Banes pull to refresh programmatically without the bounce调用 Chris Banes pull 以编程方式刷新而不会反弹
【发布时间】:2016-06-21 11:35:41
【问题描述】:

我正在以编程方式调用 pull-to-refresh,正如我片段的 onResume() 的一个衬里中的 here 精彩解释的那样。这是我的代码:

private PullToRefreshScrollView panelScrollView;

@Override
public void onResume() {
    panelScrollView.setRefreshing();            
    super.onResume();
}

这会刷新我的片段,但会出现 反弹(就像用户拉动并释放一样),这会带来糟糕的用户体验。
我的问题:

  1. 我能否获得相同的刷新不反弹
  2. 为什么片段的super.onResume() 在片段到达前台后不刷新片段?为什么我需要首先致电PullToRefreshScrollView.setRefreshing()

【问题讨论】:

  • 拉动刷新是本机支持的。为此,您不需要第三方库。 See this
  • 使用 SwipeRefreshLayout Senti。
  • 谢谢!但这是与第 3 方拉动刷新集成的“遗留代码”,它可以工作,我首先想尝试不与另一个拉动刷新解决方案集成的努力。另外我还是不明白我的问题 2,为什么 onResume() 在没有我明确调用的情况下不会刷新片段。
  • 正如下面答案中提到的,拉动刷新机制不适用于此。但是,如果您希望它在您返回片段时更新,请参阅更新的答案。

标签: android android-fragments pull-to-refresh


【解决方案1】:

首先我建议使用支持拉刷新非常好用。 https://developer.android.com/reference/android/support/v4/widget/SwipeRefreshLayout.html

  1. 文档是这样说的

    如果一个活动希望只显示进度动画,它应该 调用 setRefreshing(true) https://developer.android.com/reference/android/support/v4/widget/SwipeRefreshLayout.html#isRefreshing()

  2. 拉刷新的目的是用户特别希望数据被刷新。您正在尝试做的是一种反模式。但在理想情况下,如果您实施拉动刷新,您不希望在用户完成操作之前重新加载。这样用户就可以决定不刷新移动数据,而是在连接到wifi时快速刷新。

作为在调用片段 onResume 时实现刷新的补充,您可以创建一个从片段扩展的新类。

public class AutoRefreshFragment extends Fragment {
 ...
    public void onResume() {
          panelScrollView.setRefreshing();
    }
 ...
}

使用您刚刚创建的超类extends AutoRefreshFragment 而不是扩展常规片段。

【讨论】:

  • 感谢您的回复!请看我上面的评论。
  • 感谢更新,但这是我在原始代码 sn-p 中所做的。还是我缺少什么区别?
  • 确实相似,但没有超类。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多