SwipeRefreshLayout在片段创build上没有animation

我使用android.support.v4.widget.SwipeRefreshLayoutandroid.support.v7.widget.RecyclerView
在片段视图创build我需要显示SwipeRefreshLayoutanimation。 但是,当我打电话setRefreshing(true)没有任何反应。 但是当我刷新数据animation更改。
我想这个animation在SwipeRefreshLayout里面没有显示没有孩子。
如何以最佳方式显示此animation?

Solutions Collecting From Web of "SwipeRefreshLayout在片段创build上没有animation"

这是一个报告的错误( 在这里报告),解决方法是可用的:

 mSwipeRefreshLayout.setProgressViewOffset(false, 0, (int) TypedValue.applyDimension( TypedValue.COMPLEX_UNIT_DIP, 24, getResources().getDisplayMetrics())); mSwipeRefreshLayout.setRefreshing(true); 

多谢你们。

我刚刚意识到,最简单的解决scheme是在调用setRefreshing(true)之前调用非零值的方法measure(int,int)。 问题正在发生,因为setRefreshing(true)在onMeasure之前调用。

所以你需要打电话给:

 swipeRefreshLayout.measure(initialWidth, initialHeight); swipeRefreshLayout.setRefreshing(true); 

这取决于你正在build立的API级别 – 如果你使用了API 20,那么你可以打开setRefreshing(true),这将在ActionBar中运行animation,但是在API 21(Material Design)中,它们在旋转之前,改变了成为一个微调的进展

在API 21中有两种方法来解决这个问题:1)使用setProgressViewOffset()移动微调器,但是记得把它移回备用字(注意,这在px中有效,而setDistanceToTriggerSync()使用dp)2)在加载数据时显示的重复微调器

更有代码效率的解决scheme是使用现有的微调,但是你必须小心,你重置其位置

如果您需要计算像素密度,可以从以下位置获取:

 DisplayMetrics metrics = new DisplayMetrics(); activity.getWindowManager().getDefaultDisplay().getMetrics(metrics); float scale = metrics.density; 

SwipeRefreshLayout必须包含一个孩子才能正常工作。 请确保您在任何地方使用它之前初始化它!

你必须在onDraw() setRefreshing(true)之后调用setRefreshing(true) ,否则不会显示animation。

所以,在Activity中,你可以在onCreate()中这样做:

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // other codes new Handler().post(new Runnable() { @Override public void run() { swipeRefreshLayout.setRefreshing(true); refreshing = true; refreshData(); } } } 

在片段中,你可以把这些代码放在onActivityCreated()