【问题标题】:How to update ListView in Fragment from FragmentActivity?如何从 FragmentActivity 更新 Fragment 中的 ListView?
【发布时间】:2014-01-29 03:59:38
【问题描述】:

我有三个片段,其中一个有一个 ListView,它被填充在一个异步任务中(从服务器获取数据作为 JSON)。我想做的是在标签更改为带有 ListView 的片段时调用此异步任务。

我有一个选项卡式/可滑动的界面,当用户导航到Fragment 时,我不知道在FragmentActivity 中的何处进行调用以刷新ListView

现在我在包含ListView 的片段的onCreateView() 方法中调用这样的异步任务new LoadAllProducts().execute();。我想我需要在FragmentActivity 的 onTabSelected() 方法中调用此异步任务,但我不确定如何进行此调用...感谢任何帮助!

谢谢!

编辑 1:

根据答案尝试过这样的事情:

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

    new LoadAllProducts().execute();
}

没有运气,没有抛出错误,也没有刷新数据,所以我猜 LoadAllProducts() 没有被调用。

编辑 2:

现在尝试这样的事情:
公共无效 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();
}
}

在您实际运行应用程序并滑动到位置一的选项卡之前,这不会显示任何错误。这是 LogCat。当你滑动到它的片段/标签时,我真的没有想法如何让这个列表刷新。 :(

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()
  • 感谢 Gaurav,但它似乎在 onResume() 中没有任何作用。列表没有刷新……我错过了什么吗?无论如何要在您滑动到标签时强制刷新?

标签: android android-listview android-fragments android-fragmentactivity


【解决方案1】:

我认为当您导航到另一个选项卡时会调用简历。

我自己没有使用过标签,但如果是这样的话,我会在其中放置异步任务。

【讨论】:

  • 感谢 Adam,现在正在研究 onResume()。查看我对原始帖子的更新,有什么想法可能会出错吗?
  • 我很确定调用生命周期阶段是不受欢迎的。它们是自己发生的。也许调用您的片段管理器来用新实例替换您的片段?在 tabselected 的主要活动中,只需替换片段。如果您在第一次创建片段时可以执行列表,请重新创建它以重复 pprocess?
猜你喜欢
  • 2012-04-19
  • 1970-01-01
  • 1970-01-01
  • 2014-04-18
  • 1970-01-01
  • 1970-01-01
  • 2014-04-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多