thunderousNinja thunderousNinja - 3 months ago 53
Android Question

SwipeRefreshLayout setRefreshing not showing indicator initially

I have a very simple layout but when I call setRefreshing(true) in onActivityCreate of my fragment it does not show initially. It only shows when I do a pull to refresh. Any ideas why it isnt showing up initially?

Fragment xml:

<android.support.v4.widget.SwipeRefreshLayout
android:id="@+id/swipe_container"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
>

<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">

<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

</RelativeLayout>


</ScrollView>
</android.support.v4.widget.SwipeRefreshLayout>


Fragment code:

public static class LinkDetailsFragment extends BaseFragment implements SwipeRefreshLayout.OnRefreshListener {

@InjectView(R.id.swipe_container)
SwipeRefreshLayout mSwipeContainer;

public static LinkDetailsFragment newInstance(String subreddit, String linkId) {
Bundle args = new Bundle();
args.putString(EXTRA_SUBREDDIT, subreddit);
args.putString(EXTRA_LINK_ID, linkId);

LinkDetailsFragment fragment = new LinkDetailsFragment();
fragment.setArguments(args);

return fragment;
}

public LinkDetailsFragment() {
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);

mSwipeContainer.setOnRefreshListener(this);
mSwipeContainer.setColorScheme(android.R.color.holo_blue_bright,
android.R.color.holo_green_light,
android.R.color.holo_orange_light,
android.R.color.holo_red_light);
mSwipeContainer.setRefreshing(true);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
final View rootView = inflater.inflate(R.layout.fragment_link_details, container, false);
ButterKnife.inject(this, rootView);
return rootView;
}

@Override
public void onRefresh() {
// refresh
}
}

Answer

Faced with same issue. My solution -

mSwipeRefreshLayout.post(new Runnable() {
    @Override
    public void run() {
        mSwipeRefreshLayout.setRefreshing(true);
    }
});