如何实现Android的拉取刷新

dy1byipe  于 2022-09-21  发布在  Android
关注(0)|答案(18)|浏览(147)

在Twitter(官方应用)等Android应用中,当你遇到ListView时,你可以拉下它(发布后它会反弹回来)来刷新内容。

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

我能想到的一些可能性是:

1.ListView顶部的项目--然而,我不认为在ListView上使用动画滚动回到项目位置1(从0开始)是一件容易的任务。
1.ListView外部的另一个视图-但我需要注意在拖拽ListView时将ListView位置向下移动,并且我不确定是否可以检测到拖拽到ListView的触摸是否真的滚动ListView上的项。

有什么建议吗?

另外,我想知道Twitter应用程序的官方源代码什么时候发布。有人提到它会上映,但6个月过去了,我们再也没有听到过它的消息。

6za6bjd0

6za6bjd016#

我认为最简单的方法是Android支持库提供的:

Android.support.v4.widget.SwipeREFREFRESH Layout;

导入后,您可以按如下方式定义布局:

<android.support.v4.widget.SwipeRefreshLayout
        android:id="@+id/refresh"
        android:layout_height="match_parent"
        android:layout_width="match_parent">
    <android.support.v7.widget.RecyclerView
        xmlns:recycler_view="http://schemas.android.com/apk/res-auto"
        android:id="@android:id/list"
        android:theme="@style/Theme.AppCompat.Light"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/button_material_light"
        >

    </android.support.v7.widget.RecyclerView>
</android.support.v4.widget.SwipeRefreshLayout>

我假设您使用的是回收器视图,而不是列表视图。但是,listview仍然可以工作,所以您只需要用listview替换rececurerview,并更新Java代码(片段)中的引用。

在您的活动片段中,首先实现接口SwipeRefreshLayout.OnRefreshListener:i,e

public class MySwipeFragment extends Fragment implements SwipeRefreshLayout.OnRefreshListener{
private SwipeRefreshLayout swipeRefreshLayout;

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_item, container, false);
        swipeRefreshLayout = (SwipeRefreshLayout) view.findViewById(R.id.refresh);
        swipeRefreshLayout.setOnRefreshListener(this);
}

 @Override
  public void onRefresh(){
     swipeRefreshLayout.setRefreshing(true);
     refreshList();
  }
  refreshList(){
    //do processing to get new data and set your listview's adapter, maybe  reinitialise the loaders you may be using or so
   //when your data has finished loading, cset the refresh state of the view to false
   swipeRefreshLayout.setRefreshing(false);

   }
}

希望这对群众有所帮助

disho6za

disho6za17#

我还为Android实现了一个强大的、开源的、易于使用的、高度可定制的PullToRefresh库。您可以按照项目页面上的文档中的描述,将您的ListView替换为PullToRechreshListView。

https://github.com/erikwt/PullToRefresh-ListView

vyu0f0g1

vyu0f0g118#

我已经尝试实现了一个拉入刷新组件,它还远未完成,但演示了一个可能的实现https://github.com/johannilsson/android-pulltorefresh

主逻辑在扩展ListViewPullToRefreshListView中实现。在内部,它使用smoothScrollBy(API级别8)控制标题视图的滚动。该小部件现在更新了对1.5及更高版本的支持,但请阅读自述文件以了解1.5支持。

在布局中,您只需像这样添加它。

<com.markupartist.android.widget.PullToRefreshListView
    android:id="@+id/android:list"
    android:layout_height="fill_parent"
    android:layout_width="fill_parent"
    />

相关问题