Android 拉刷新而不是刷新片段

Android 拉刷新而不是刷新片段,android,android-fragments,Android,Android Fragments,我试图在android应用程序的一个片段中实现拉刷新。拉取片段视图时,会出现刷新图标,但视图从未刷新。 下面是我在xml文件中的尝试>>> <android.support.v4.widget.SwipeRefreshLayout android:id="@+id/pullToRefresh" android:layout_width="match_parent" android:layout_height="wrap_content">

我试图在android应用程序的一个片段中实现拉刷新。拉取片段视图时,会出现刷新图标,但视图从未刷新。 下面是我在xml文件中的尝试>>>

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

        ....

    </android.support.v4.widget.SwipeRefreshLayout>
启动应用程序并拖动以拖动以刷新时,即使出现刷新图标,也不会发生任何事情。

查看v=充气机。充气(R.layout.fragment\u home,container,false)

除了调用需要刷新的函数的代码外,没有其他代码。

因此基本上:

 @Override
    public void onRefresh() {
        // Do async call or whatever to get the new data
        // Update your data e.g:
        //    - RecylerView: update the data in your adapter and call 'notifyDataSetChanged'
        //    - fixed views: update the field
        // Call `pullToRefresh.setRefreshing(false);`
    }
编辑

如何调用
pullToRefresh.setRefreshing(false)
,以便始终在正确的时间调用它(意味着所有数据都已真正刷新):


刷新片段的代码在哪里?你需要做点什么,片段不会自动刷新自己。在您刚刚显示刷新动画的那一刻,这就是为什么。。。它只显示刷新动画。根据您尝试刷新的内容,您可能需要调用API或类似的东西。这是我目前面临的挑战,所以是的,您需要在
onRefresh()
中编写一个代码来刷新数据。现在你只是延迟结束动画,这就是为什么你只有这么多。你把代码延迟了5秒。它不是在5秒后调用的吗?@ADM否它不是。你不需要手动延迟
pullToRefresh.setrefresh(false)
,因为它应该在所有数据刷新后调用,而不是在特定时间后调用。我理解这一点,但我认为这是提问者的要求。所以我这么做了。我只是添加了需要在on refresh方法中调用的函数,就是这样。。。感谢不要延迟调用
pullToRefresh.setrefresh(false)您应该在所有数据更新后调用它。因此,如果它是同步的,它应该在函数的末尾,如果它是异步的,它应该在异步调用的所有操作的末尾。目前,它是在5s后调用的,但取决于您的实现,刷新数据可能需要更多或更少的时间。您的意思是我应该注释掉它>>>>pullToRefresh.SetRefresh(false);
    final SwipeRefreshLayout pullToRefresh = (SwipeRefreshLayout) v.findViewById(R.id.pullToRefresh);

    final ListView lv = (ListView) v.findViewById(R.id.lv);
    new (xxx lv).execute();

    pullToRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {

        @Override
        public void onRefresh() {
            // TODO Auto-generated method stub

            **You have to write code that you need to perform on refresh calling**
            new Handler().postDelayed(new Runnable() {
                @Override public void run() {
                    pullToRefresh.setRefreshing(false);
                }
            }, 5000);

        }
    });



    return v;
}
 @Override
    public void onRefresh() {
        // Do async call or whatever to get the new data
        // Update your data e.g:
        //    - RecylerView: update the data in your adapter and call 'notifyDataSetChanged'
        //    - fixed views: update the field
        // Call `pullToRefresh.setRefreshing(false);`
    }
@Override
public void onRefresh() {
    update();
}

private void update(){
    // Get the data synchronously or asynchronously
    // update the view with the data
    // then: (remove the code relative to the Handler)
    pullToRefresh.setRefreshing(false);
}