Как вызвать swiperefreshlayout в Android?

Я хочу активировать SwipeRefreshLayout в событии onCreateView моего MainFragment. Что я хочу сделать, так это начать загрузку информации в событии onCreateView, и в то же время я показываю обновление SwipeRefreshLayout. Любые идеи?

Вот мой код в моем коде Java в MainFragment

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_main, container, false);
        SwipeRefreshLayout swpRfrshLyt= (SwipeRefreshLayout) rootView.findViewById(R.id.swpRfrshLyt);

        swpRfrshLyt.setColorSchemeResources(R.color.holo_blue_light,
                R.color.holo_green_light,
                R.color.holo_orange_light,
                R.color.holo_red_light);

        swpRfrshLyt.setOnRefreshListener(this);
        swpRfrshLyt.setRefreshing(true);
        return rootView;
    }

Вот мой fragment_main.xml

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

    <ListView
        android:id="@+id/lstvw_items"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

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

Я использую Android Studio, вот мой градус сборки

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:+'
    compile 'com.android.support:support-v4:+'
    compile 'com.mcxiaoke.volley:library:1.0.+'
}

Я установил Android SDK Build Tools 21.0.2


person Nestor Lara    schedule 22.10.2014    source источник
comment
Возможный дубликат программного запуска SwipeRefreshLayout   -  person R. Zagórski    schedule 19.12.2016


Ответы (3)


Существует лучшее решение для достижения этой цели, используя следующее:

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

Здесь mSwipeRefreshLayout — это SwipeRefreshLayout. Если вы просто позвоните:

 mSwipeRefreshLayout.setRefreshing(true);

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

При вызове mSwipeRefreshLayout.setRefreshing(true) OnRefreshListener также будет выполнен, поэтому после завершения задачи просто добавьте mSwipeRefreshLayout.setRefreshing(false), чтобы остановить анимацию круга.

person Ramz    schedule 17.01.2015
comment
Большое спасибо, вы спасли мой день! - person uestcfei; 17.10.2015

После вызова swpRfrshLyt.setRefreshing(true); вам нужно вызвать функцию, которая выполняет обновление. Он не вызывается автоматически. А еще лучше, создайте функцию, которая сделает за вас и то, и другое.

ОБНОВЛЕНИЕ

НЕ ИСПОЛЬЗУЙТЕ ЭТО РЕШЕНИЕ – читайте ниже

Спиннер находится за панелью действий, поэтому вам нужно нажать на него.

Display display = getActivity().getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int height = size.y;
    getSwipeRefreshLayout().setProgressViewOffset(false, 200, height / 9);

ОБНОВЛЕНИЕ 2

Я бы больше не рекомендовал мое выше решение. Лучшее решение:

getSwipeRefreshLayout().post(new Runnable() {
    @Override public void run() {
        getSwipeRefreshLayout().setRefreshing(true);
    }
});
person KVISH    schedule 29.10.2014
comment
Я хотел сказать, что метод swpRfrshLyt.setRefreshing(true); у меня не работает. - person Nestor Lara; 29.10.2014
comment
Это работает. Спиннер появляется за панелью действий. Я обновлю свой ответ. - person KVISH; 29.10.2014
comment
Это работает! Где я должен вызвать swpRfrshLyt.setRefreshing(true) без жесткого определения смещения? - person Nestor Lara; 29.10.2014
comment
Вы можете просто вызвать функцию, чтобы сделать то, что я сделал выше в начале действия. Затем делайте setRefreshing в любое время, когда вам это нужно. И, пожалуйста, примите ответ :) - person KVISH; 29.10.2014

В дополнение к принятому ответу используйте также следующий код:

swipeContainer.post(new Runnable() {
        @Override
        public void run() {
            swipeContainer.setRefreshing(false);
        }
    });

Объяснение Я реализовал решение (используя фрагменты), но после запуска swipeReferesh оно не исчезло даже при вызове swipeContainer.setRefreshing(false);, поэтому пришлось реализовать приведенный выше код, который решил мою проблему. любые другие идеи, почему это происходит, приветствуются.

С уважением,

P.S.: com.android.support:appcompat-v7:22.2.1

person Junaid    schedule 01.11.2015