как остановить анимацию PullToRefresh ListView

Я использовал Android-PullToRefresh от chrisbanes, чтобы показать ход обновления в моем приложении.

Я загружаю данные в AsyncTask, поэтому начинаю обновление, вызывая mPullRefreshListView.setRefreshing();
в методе onPreExecute.

и остановите обновление, вызвав mPullRefreshListView.onRefreshComplete();
в методе onPostExecute.

Это прекрасно работает. Но проблема возникает, когда сеть не работает. Потому что я больше не буду использовать AsyncTask, когда сеть не работает, вместо этого я загружаю локальный кеш.

Я не хочу показывать анимацию PullToRefresh при обновлении, если сеть не работает, но поскольку он зарегистрировал setOnRefreshListener, каждый раз, когда пользователь вытаскивает ListView, он показывает анимацию обновления и никогда не исчезает.

Пробовал отключать анимацию вызовом mPullRefreshListView.onRefreshComplete();, не помогает.

if (!Utils.isNetworkOn()) {
                if (mPullRefreshListView.isRefreshing())
                    mPullRefreshListView.onRefreshComplete();
            }

Меня это очень смущает, кто-нибудь знает, как с этим справиться?
Заранее спасибо.


person Logan Guo    schedule 13.12.2014    source источник
comment
Вероятно, вы можете взломать его, установив для thisChildsArePullable (или как там это называется) в pullToRefresh значение null, когда ваша сеть выходит из строя, а затем повторно установив его, когда сеть находится в сети. Хотя не пробовал.   -  person kha    schedule 19.12.2014


Ответы (1)


Лучше использовать SwipeRefreshLayout, так как проект Криса Бэйна больше не поддерживается:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

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

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

In fragment:
private void pullToRefreshForConfiguredList(View view) {

        mConfiguredSwipeRefreshLayout = (SwipeRefreshLayout) view
                .findViewById(R.id.srl_layout);
        mConfiguredSwipeRefreshLayout
        .setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {

            @Override
            public void onRefresh() {
                // call Method to be refreshed

if (mConfiguredSwipeRefreshLayout.isRefreshing())
                        mConfiguredSwipeRefreshLayout.setRefreshing(false);
            }
        });
        mConfiguredSwipeRefreshLayout.setColorScheme(android.R.color.black,
                R.color.red, android.R.color.black, R.color.red);
    }
person Niveditha    schedule 19.12.2014
comment
Но нет полных руководств о том, как использовать это - person Logan Guo; 19.12.2014
comment
Позвольте мне погуглить это для вас survivingwithandroid.com/2014/05/ - person Alexander Zhak; 19.12.2014