Как обновить ListView во фрагменте из FragmentActivity?

У меня есть три фрагмента, один из которых имеет ListView, который заполняется внутри асинхронной задачи (получает данные с сервера в виде JSON). Что я хотел бы сделать, так это вызывать эту асинхронную задачу всякий раз, когда вкладка изменяется на фрагмент с помощью ListView.

У меня есть интерфейс с вкладками/перелистыванием, и я понятия не имею, где сделать вызов в FragmentActivity, чтобы обновить ListView, когда пользователь переходит к этому Fragment.

Прямо сейчас я вызываю асинхронную задачу, как это new LoadAllProducts().execute(); в методе onCreateView() фрагмента, который содержит ListView. Я думаю, мне нужен вызов этой асинхронной задачи в методе onTabSelected() FragmentActivity, но я не уверен, как сделать этот вызов... любая помощь приветствуется!

Спасибо!

РЕДАКТИРОВАТЬ 1:

Пробовал что-то вроде этого в ответах:

public void onResume() {
    super.onResume();

    new LoadAllProducts().execute();
}

Не повезло, никаких ошибок не возникало, но также и не обновлялись данные, поэтому я предполагаю, что LoadAllProducts() не вызывается.

Редактировать 2:

Сейчас попробую что-то вроде этого:
public void onResume() { super.onResume();

    new LoadAllProducts().execute();

}

^Внутри фрагмента. И следующее внутри родительского Activity:

@Override
public void onTabSelected(Tab arg0, android.app.FragmentTransaction arg1) {
    // TODO Auto-generated method stub

Fragment frag = (Fragment) getSupportFragmentManager().findFragmentById(arg0.getPosition());

if (arg0.getPosition() == 1) {
    frag.onResume();
}
}

Это не показывает ошибок, пока вы не запустите приложение и не перейдете на вкладку в первой позиции. Вот ЛогКэт. У меня действительно заканчиваются идеи, как обновить этот список, когда вы проводите пальцем по его фрагменту/вкладке. :(

01-29 00:47:30.792: E/InputEventReceiver(2211): Exception dispatching input event.
01-29 00:47:30.792: E/MessageQueue-JNI(2211): Exception in MessageQueue callback: handleReceiveCallback
01-29 00:47:30.851: E/MessageQueue-JNI(2211): java.lang.NullPointerException
01-29 00:47:30.851: E/MessageQueue-JNI(2211):   at com.geronimosoft.autotracker.activities.MAINSCREEN_Activity.onTabSelected(MAINSCREEN_Activity.java:436)
01-29 00:47:30.851: E/MessageQueue-JNI(2211):   at com.android.internal.app.ActionBarImpl.selectTab(ActionBarImpl.java:572)
01-29 00:47:30.851: E/MessageQueue-JNI(2211):   at com.android.internal.app.ActionBarImpl.setSelectedNavigationItem(ActionBarImpl.java:358)
01-29 00:47:30.851: E/MessageQueue-JNI(2211):   at com.geronimosoft.autotracker.activities.MAINSCREEN_Activity$1.onPageSelected(MAINSCREEN_Activity.java:138)
01-29 00:47:30.851: E/MessageQueue-JNI(2211):   at android.support.v4.view.ViewPager.scrollToItem(ViewPager.java:567)
01-29 00:47:30.851: E/MessageQueue-JNI(2211):   at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:551)
01-29 00:47:30.851: E/MessageQueue-JNI(2211):   at android.support.v4.view.ViewPager.onTouchEvent(ViewPager.java:2015)
01-29 00:47:30.851: E/MessageQueue-JNI(2211):   at android.view.View.dispatchTouchEvent(View.java:7384)
01-29 00:47:30.851: E/MessageQueue-JNI(2211):   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2205)
01-29 00:47:30.851: E/MessageQueue-JNI(2211):   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1940)
01-29 00:47:30.851: E/MessageQueue-JNI(2211):   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2211)
01-29 00:47:30.851: E/MessageQueue-JNI(2211):   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1954)
01-29 00:47:30.851: E/MessageQueue-JNI(2211):   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2211)
01-29 00:47:30.851: E/MessageQueue-JNI(2211):   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1954)
01-29 00:47:30.851: E/MessageQueue-JNI(2211):   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2211)
01-29 00:47:30.851: E/MessageQueue-JNI(2211):   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1954)
01-29 00:47:30.851: E/MessageQueue-JNI(2211):   at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1966)
01-29 00:47:30.851: E/MessageQueue-JNI(2211):   at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1418)
01-29 00:47:30.851: E/MessageQueue-JNI(2211):   at android.app.Activity.dispatchTouchEvent(Activity.java:2424)
01-29 00:47:30.851: E/MessageQueue-JNI(2211):   at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1914)
01-29 00:47:30.851: E/MessageQueue-JNI(2211):   at android.view.View.dispatchPointerEvent(View.java:7564)
01-29 00:47:30.851: E/MessageQueue-JNI(2211):   at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:3883)
01-29 00:47:30.851: E/MessageQueue-JNI(2211):   at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3778)
01-29 00:47:30.851: E/MessageQueue-JNI(2211):   at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3379)
01-29 00:47:30.851: E/MessageQueue-JNI(2211):   at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3429)
01-29 00:47:30.851: E/MessageQueue-JNI(2211):   at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3398)
01-29 00:47:30.851: E/MessageQueue-JNI(2211):   at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3483)
01-29 00:47:30.851: E/MessageQueue-JNI(2211):   at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3406)
01-29 00:47:30.851: E/MessageQueue-JNI(2211):   at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3540)
01-29 00:47:30.851: E/MessageQueue-JNI(2211):   at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3379)
01-29 00:47:30.851: E/MessageQueue-JNI(2211):   at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3429)
01-29 00:47:30.851: E/MessageQueue-JNI(2211):   at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3398)
01-29 00:47:30.851: E/MessageQueue-JNI(2211):   at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3406)
01-29 00:47:30.851: E/MessageQueue-JNI(2211):   at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3379)
01-29 00:47:30.851: E/MessageQueue-JNI(2211):   at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5419)
01-29 00:47:30.851: E/MessageQueue-JNI(2211):   at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5399)
01-29 00:47:30.851: E/MessageQueue-JNI(2211):   at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5370)
01-29 00:47:30.851: E/MessageQueue-JNI(2211):   at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:5493)
01-29 00:47:30.851: E/MessageQueue-JNI(2211):   at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:182)
01-29 00:47:30.851: E/MessageQueue-JNI(2211):   at android.os.MessageQueue.nativePollOnce(Native Method)
01-29 00:47:30.851: E/MessageQueue-JNI(2211):   at android.os.MessageQueue.next(MessageQueue.java:132)
01-29 00:47:30.851: E/MessageQueue-JNI(2211):   at android.os.Looper.loop(Looper.java:124)
01-29 00:47:30.851: E/MessageQueue-JNI(2211):   at android.app.ActivityThread.main(ActivityThread.java:5103)
01-29 00:47:30.851: E/MessageQueue-JNI(2211):   at java.lang.reflect.Method.invokeNative(Native Method)
01-29 00:47:30.851: E/MessageQueue-JNI(2211):   at java.lang.reflect.Method.invoke(Method.java:525)
01-29 00:47:30.851: E/MessageQueue-JNI(2211):   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
01-29 00:47:30.851: E/MessageQueue-JNI(2211):   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
01-29 00:47:30.851: E/MessageQueue-JNI(2211):   at dalvik.system.NativeStart.main(Native Method)
01-29 00:47:30.862: D/AndroidRuntime(2211): Shutting down VM
01-29 00:47:30.862: W/dalvikvm(2211): threadid=1: thread exiting with uncaught exception (group=0x41465700)
01-29 00:47:30.932: E/AndroidRuntime(2211): FATAL EXCEPTION: main
01-29 00:47:30.932: E/AndroidRuntime(2211): java.lang.NullPointerException
01-29 00:47:30.932: E/AndroidRuntime(2211):     at com.geronimosoft.autotracker.activities.MAINSCREEN_Activity.onTabSelected(MAINSCREEN_Activity.java:436)
01-29 00:47:30.932: E/AndroidRuntime(2211):     at com.android.internal.app.ActionBarImpl.selectTab(ActionBarImpl.java:572)
01-29 00:47:30.932: E/AndroidRuntime(2211):     at com.android.internal.app.ActionBarImpl.setSelectedNavigationItem(ActionBarImpl.java:358)
01-29 00:47:30.932: E/AndroidRuntime(2211):     at com.geronimosoft.autotracker.activities.MAINSCREEN_Activity$1.onPageSelected(MAINSCREEN_Activity.java:138)
01-29 00:47:30.932: E/AndroidRuntime(2211):     at android.support.v4.view.ViewPager.scrollToItem(ViewPager.java:567)
01-29 00:47:30.932: E/AndroidRuntime(2211):     at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:551)
01-29 00:47:30.932: E/AndroidRuntime(2211):     at android.support.v4.view.ViewPager.onTouchEvent(ViewPager.java:2015)
01-29 00:47:30.932: E/AndroidRuntime(2211):     at android.view.View.dispatchTouchEvent(View.java:7384)
01-29 00:47:30.932: E/AndroidRuntime(2211):     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2205)
01-29 00:47:30.932: E/AndroidRuntime(2211):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1940)
01-29 00:47:30.932: E/AndroidRuntime(2211):     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2211)
01-29 00:47:30.932: E/AndroidRuntime(2211):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1954)
01-29 00:47:30.932: E/AndroidRuntime(2211):     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2211)
01-29 00:47:30.932: E/AndroidRuntime(2211):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1954)
01-29 00:47:30.932: E/AndroidRuntime(2211):     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2211)
01-29 00:47:30.932: E/AndroidRuntime(2211):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1954)
01-29 00:47:30.932: E/AndroidRuntime(2211):     at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1966)
01-29 00:47:30.932: E/AndroidRuntime(2211):     at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1418)
01-29 00:47:30.932: E/AndroidRuntime(2211):     at android.app.Activity.dispatchTouchEvent(Activity.java:2424)
01-29 00:47:30.932: E/AndroidRuntime(2211):     at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1914)
01-29 00:47:30.932: E/AndroidRuntime(2211):     at android.view.View.dispatchPointerEvent(View.java:7564)
01-29 00:47:30.932: E/AndroidRuntime(2211):     at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:3883)
01-29 00:47:30.932: E/AndroidRuntime(2211):     at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3778)
01-29 00:47:30.932: E/AndroidRuntime(2211):     at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3379)
01-29 00:47:30.932: E/AndroidRuntime(2211):     at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3429)
01-29 00:47:30.932: E/AndroidRuntime(2211):     at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3398)
01-29 00:47:30.932: E/AndroidRuntime(2211):     at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3483)
01-29 00:47:30.932: E/AndroidRuntime(2211):     at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3406)
01-29 00:47:30.932: E/AndroidRuntime(2211):     at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3540)
01-29 00:47:30.932: E/AndroidRuntime(2211):     at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3379)
01-29 00:47:30.932: E/AndroidRuntime(2211):     at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3429)
01-29 00:47:30.932: E/AndroidRuntime(2211):     at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3398)
01-29 00:47:30.932: E/AndroidRuntime(2211):     at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3406)
01-29 00:47:30.932: E/AndroidRuntime(2211):     at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3379)
01-29 00:47:30.932: E/AndroidRuntime(2211):     at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5419)
01-29 00:47:30.932: E/AndroidRuntime(2211):     at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5399)
01-29 00:47:30.932: E/AndroidRuntime(2211):     at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5370)
01-29 00:47:30.932: E/AndroidRuntime(2211):     at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:5493)
01-29 00:47:30.932: E/AndroidRuntime(2211):     at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:182)
01-29 00:47:30.932: E/AndroidRuntime(2211):     at android.os.MessageQueue.nativePollOnce(Native Method)
01-29 00:47:30.932: E/AndroidRuntime(2211):     at android.os.MessageQueue.next(MessageQueue.java:132)
01-29 00:47:30.932: E/AndroidRuntime(2211):     at android.os.Looper.loop(Looper.java:124)
01-29 00:47:30.932: E/AndroidRuntime(2211):     at android.app.ActivityThread.main(ActivityThread.java:5103)
01-29 00:47:30.932: E/AndroidRuntime(2211):     at java.lang.reflect.Method.invokeNative(Native Method)
01-29 00:47:30.932: E/AndroidRuntime(2211):     at java.lang.reflect.Method.invoke(Method.java:525)
01-29 00:47:30.932: E/AndroidRuntime(2211):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
01-29 00:47:30.932: E/AndroidRuntime(2211):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
01-29 00:47:30.932: E/AndroidRuntime(2211):     at dalvik.system.NativeStart.main(Native Method)

person Tudor Hofnar    schedule 29.01.2014    source источник
comment
Я не так много могу опубликовать, я не получаю никаких ошибок в своей асинхронной задаче, все, что мне нужно сделать, это вызвать ее, когда пользователь переходит на определенную вкладку...   -  person Tudor Hofnar    schedule 29.01.2014
comment
Может быть полезно: stackoverflow.com/a/20107657/1318946   -  person Pratik Butani    schedule 29.01.2014
comment
onResume() должно быть правильным местом для обновления, так как при смене вкладки будет отображаться ваш фрагмент ListView, поэтому в этот момент следует вызвать onResume().   -  person Gaurav Gupta    schedule 29.01.2014
comment
Спасибо Gaurav, но, похоже, он ничего не делает в onResume(). Список не обновляется... я что-то пропустил? В любом случае, чтобы принудительно обновить, когда вы проводите по вкладке?   -  person Tudor Hofnar    schedule 30.01.2014


Ответы (1)


Я думаю, что резюме будет вызвано, когда вы перейдете на другую вкладку.

Я сам не использовал вкладки, но если да, то я бы поставил асинхронную задачу.

person AdamM    schedule 29.01.2014
comment
Спасибо, Адам, теперь изучаю onResume(). Смотрите мое обновление к исходному сообщению, есть идеи, где я могу ошибаться? - person Tudor Hofnar; 29.01.2014
comment
Я почти уверен, что называть этапы жизненного цикла не одобряется. Они происходят сами по себе. Может быть, вместо этого позвонить вашему диспетчеру фрагментов, чтобы заменить ваш фрагмент новым экземпляром? В основном действии на tabselected просто замените фрагмент. Если вы можете сделать список при первом создании фрагмента, воссоздать его, чтобы повторить pprocess? - person AdamM; 29.01.2014