2014-10-22 4 views
5

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

Вот мой код в моем 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, вот моя сборка Gradle

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

+0

Возможный дубликат [SwipeRefreshLayout запуска программно] (http://stackoverflow.com/questions/24587925/swiperefreshlayout-trigger-programmatically) –

ответ

18

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

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

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

mSwipeRefreshLayout.setRefreshing(true); 

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

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

+0

Чистый и идеальный! – Braj

+0

Большое спасибо, вы спасли мой день! – uestcfei

+0

принят ответ –

5

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

UPDATE

НЕ ИСПОЛЬЗОВАТЬ ЭТО РЕШЕНИЕ - читайте ниже

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

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

UPDATE 2

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

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

То, что я хотел скажем, что метод swpRfrshLyt.setRefreshing (true) не работает для меня. –

+0

Это действительно работает. Прямоугольник появляется за панелью действий. Я обновляю свой ответ. – KVISH

+0

Это работает! Где я должен называть swpRfrshLyt.setRefreshing (true) без хардкора смещения? –

2

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

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

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

С уважением,

PS:com.android.support:appcompat-v7:22.2.1