У меня есть три фрагмента, один из которых имеет 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)
onResume()
должно быть правильным местом для обновления, так как при смене вкладки будет отображаться ваш фрагмент ListView, поэтому в этот момент следует вызватьonResume()
. - person Gaurav Gupta   schedule 29.01.2014