Android 如何从FragmentActivity更新片段中的ListView?
我有三个片段,其中一个有一个ListView,它在异步任务中填充(以JSON的形式从服务器获取数据)。我想做的是在标签被更改为带有ListView的片段时调用这个异步任务 我有一个选项卡式/可切换界面,当用户导航到该Android 如何从FragmentActivity更新片段中的ListView?,android,android-listview,android-fragments,android-fragmentactivity,Android,Android Listview,Android Fragments,Android Fragmentactivity,我有三个片段,其中一个有一个ListView,它在异步任务中填充(以JSON的形式从服务器获取数据)。我想做的是在标签被更改为带有ListView的片段时调用这个异步任务 我有一个选项卡式/可切换界面,当用户导航到该片段时,我不知道在FragmentActivity中在何处进行调用以刷新列表视图 现在我调用异步任务,如下所示newloadAllProducts().execute()。我想我需要在FragmentActivity的onTabSelected()方法中调用此异步任务,但我不确定如何
片段时,我不知道在FragmentActivity
中在何处进行调用以刷新列表视图
现在我调用异步任务,如下所示newloadAllProducts().execute()包含列表视图的片段的onCreateView()
方法中的code>。我想我需要在FragmentActivity
的onTabSelected()方法中调用此异步任务,但我不确定如何进行此调用…非常感谢您的帮助
谢谢
编辑1:
根据答案中的内容尝试了类似的方法:
public void onResume() {
super.onResume();
new LoadAllProducts().execute();
}
没有运气,没有抛出错误,也没有刷新数据,所以我猜LoadAllProducts()没有被调用
编辑2:
现在尝试类似的方法:
恢复时公开作废(){
super.onResume()
^片段内部。以及父活动内部的以下内容:
@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();
}
}
在您实际运行应用程序并滑动到位置1的选项卡之前,这不会显示任何错误。这是LogCat。我真的不知道如何在滑动到其片段/选项卡时刷新此列表:(
我想当你导航到另一个标签页时,简历上会有人打电话给你
我自己没有使用过选项卡,但如果是这样的话,我会将异步任务放在那里。我可以发布的内容不多,我的异步任务中没有任何错误,我只需要在用户滑动到特定选项卡时调用它……可能有用:onResume()
应该是正确的刷新位置,因为当您更改选项卡时,将显示ListView片段,因此此时应调用onResume()
。感谢Gaurav,但它在onResume()中似乎没有任何作用。列表没有刷新…我是否遗漏了什么?当你滑动到选项卡时是否强制刷新?谢谢Adam,查看onResume()现在。查看我对原始帖子的更新,有没有什么想法我可能会出错?我很确定不赞成调用生命周期阶段。它们是自己发生的。也许可以打电话给你的片段管理器,用一个新实例替换你的片段?在选中的选项卡上的主活动中,只替换片段。如果你可以在你先创建一个片段,然后重新创建它来重复这个过程?
@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)