小编典典

如何实现Android Pull-to-Refresh

all

在 Twitter(官方应用)等 Android 应用程序中,当遇到 ListView 时,可以将其拉下(释放时会弹回)以刷新内容。

我想知道在您看来,实现它的最佳方式是什么?

我能想到的一些可能性:

  1. ListView 顶部的一个项目 - 但是我认为使用 ListView 上的动画滚动回项目位置 1(基于 0)并不是一件容易的事。
  2. ListView 之外的另一个视图 - 但我需要注意在拉动 ListView 时将其位置向下移动,而且我不确定我们是否可以检测到对 ListView 的拖动触摸是否仍然真正滚动 ListView 上的项目。

有什么建议吗?

PS我想知道官方Twitter应用程序源代码何时发布。已经提到它会发布,但是6个月过去了,从那以后我们就没有听说过它。


阅读 218

收藏
2022-03-14

共1个答案

小编典典

终于,谷歌发布了正式版的pull-to-refresh库!

SwipeRefreshLayout在支持库中被调用,文档在
这里

  1. 添加SwipeRefreshLayout为视图的父视图,这将被视为刷新布局的拉动。(我ListView举个例子,它可以是任何ViewlikeLinearLayoutScrollView

     <android.support.v4.widget.SwipeRefreshLayout
     android:id="@+id/pullToRefresh"
     android:layout_width="match_parent"
     android:layout_height="wrap_content">
     <ListView
         android:id="@+id/listView"
         android:layout_width="match_parent"
         android:layout_height="match_parent"/>
    

  2. 为您的班级添加一个监听器

     protected void onCreate(Bundle savedInstanceState) {
     final SwipeRefreshLayout pullToRefresh = findViewById(R.id.pullToRefresh);
     pullToRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
         @Override
         public void onRefresh() {
             refreshData(); // your code
             pullToRefresh.setRefreshing(false);
         }
     });
    

    }

您也可以pullToRefresh.setRefreshing(true/false);根据您的要求拨打电话。

更新

Android 支持库已被弃用,并已被 AndroidX 取代。可以在
此处

找到新库的链接。

此外,您需要将以下依赖项添加到您的项目中:

implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'

要么

你可以去 Refactor>>Migrate to AndroidX 和 Android Studio 会为你处理依赖。

2022-03-14