android – 预加载所有碎片的视图?

android – 预加载所有碎片的视图?,第1张

概述初步情况: 嗨,我目前正在处理现有应用程序的更新,并且遇到一个特定活动的问题.它包含7个选项卡,在这些选项卡中有不同方法的几个图像按钮和文本视图. 在应用程序的原始版本中,我使用了tabhost,基本上在一个xml文件和一个java文件中包含了所有必需的内容,但是无法侧向滑动tabcontent来更改选项卡,所以我用片段再次创建了整个文件. 挑战: 在ActionBar中,我有一个过滤器按钮,它应 初步情况:

嗨,我目前正在处理现有应用程序的更新,并且遇到一个特定活动的问题.它包含7个选项卡,在这些选项卡中有不同方法的几个图像按钮和文本视图.

在应用程序的原始版本中,我使用了tabhost,基本上在一个xml文件和一个java文件中包含了所有必需的内容,但是无法侧向滑动tabcontent来更改选项卡,所以我用片段再次创建了整个文件.

挑战:

在Actionbar中,我有一个过滤器按钮,它应该隐藏所有选项卡中的某些文本视图和图像按钮,方法是检查一个标志,然后调用所有7个片段类中的方法,然后将它们的rootVIEw中的视图设置为GONE,如果切换再次,可见.

问题:

如果用户首先滚动浏览所有选项卡,则此Actionbar按钮可以正常工作,但如果点击应用程序的冷启动,它将使应用程序崩溃并使用NullPointer例外.
我怀疑这是,因为并非所有片段都已加载.

题:

我应该在活动开始时预加载所有片段吗?
如果是这样,我将如何做到这一点以及将在哪个文件中完成?
有没有另一种,也许更好的方法,以确保,我可以 *** 纵Actionbar中的所有选项卡/片段,即使我不知道,之前打开了哪些片段?
我应该将这些方法混合在一个全球方法中吗?它将以什么文件出现?

目前,它只能工作,如果你首先滚动所有选项卡,然后我可以根据需要切换过滤器.

码:

这在Activity类中调用:

public voID toggleintroonly() {    MenuItem toggle = menu.findItem(R.ID.mtoggle);    if (visible == 1) {        Fragments1.toggleintroonly();        Fragments2.toggleintroonly();        Fragments3.toggleintroonly();        Fragments4.toggleintroonly();        Fragments5.toggleintroonly();        Fragments6.toggleintroonly();        Fragments7.toggleintroonly();        toggle.setTitle(getString(R.string.menu4toggled));        toggle.setIcon(R.drawable.ic_action_showall);        visible = 0;    } else {        Fragments1.showall();        Fragments2.showall();        Fragments3.showall();        Fragments4.showall();        Fragments5.showall();        Fragments6.showall();        Fragments7.showall();        toggle.setTitle(getString(R.string.menu4));        toggle.setIcon(R.drawable.ic_action_filter);        visible = 1;    }}

这是Fragments1.toggleintroonly()的示例:

public static voID toggleintroonly() {    rootVIEw.findVIEwByID(R.ID.tv1x02).setVisibility(VIEw.GONE);    rootVIEw.findVIEwByID(R.ID.bplay1x02).setVisibility(VIEw.GONE);    rootVIEw.findVIEwByID(R.ID.bshare1x02).setVisibility(VIEw.GONE);    rootVIEw.findVIEwByID(R.ID.binfo1x02).setVisibility(VIEw.GONE);    rootVIEw.findVIEwByID(R.ID.bring1x02).setVisibility(VIEw.GONE);}

在活动启动后立即单击Actionbar中的过滤器按钮时出现错误:

10-27 16:43:34.923: E/MediaPlayer(16946): mOnCompletionListener is null. Failed to send MEDIA_PLAYBACK_COMPLETE message.10-27 16:43:49.433: D/AndroIDRuntime(16946): Shutting down VM10-27 16:43:49.433: W/dalvikvm(16946): threadID=1: thread exiting with uncaught exception (group=0x40c511f8)10-27 16:43:49.448: E/AndroIDRuntime(16946): FATAL EXCEPTION: main10-27 16:43:49.448: E/AndroIDRuntime(16946): java.lang.NullPointerException10-27 16:43:49.448: E/AndroIDRuntime(16946):    at com.cheftony.psychsoundboard.Fragments3.toggleintroonly(Fragments3.java:225)10-27 16:43:49.448: E/AndroIDRuntime(16946):    at com.cheftony.psychsoundboard.NicknamesNew.toggleintroonly(NicknamesNew.java:121)10-27 16:43:49.448: E/AndroIDRuntime(16946):    at com.cheftony.psychsoundboard.NicknamesNew.onoptionsItemSelected(NicknamesNew.java:90)10-27 16:43:49.448: E/AndroIDRuntime(16946):    at androID.app.Activity.onMenuItemSelected(Activity.java)10-27 16:43:49.448: E/AndroIDRuntime(16946):    at androID.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:353)10-27 16:43:49.448: E/AndroIDRuntime(16946):    at com.androID.internal.policy.impl.PhoneWindow.onMenuItemSelected(PhoneWindow.java)10-27 16:43:49.448: E/AndroIDRuntime(16946):    at com.androID.internal.vIEw.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java)10-27 16:43:49.448: E/AndroIDRuntime(16946):    at com.androID.internal.vIEw.menu.MenuItemImpl.invoke(MenuItemImpl.java)10-27 16:43:49.448: E/AndroIDRuntime(16946):    at com.androID.internal.vIEw.menu.MenuBuilder.performItemAction(MenuBuilder.java)10-27 16:43:49.448: E/AndroIDRuntime(16946):    at com.androID.internal.vIEw.menu.ActionMenuVIEw.invokeItem(ActionMenuVIEw.java)10-27 16:43:49.448: E/AndroIDRuntime(16946):    at com.androID.internal.vIEw.menu.ActionMenuItemVIEw.onClick(ActionMenuItemVIEw.java)10-27 16:43:49.448: E/AndroIDRuntime(16946):    at androID.vIEw.VIEw.performClick(VIEw.java)10-27 16:43:49.448: E/AndroIDRuntime(16946):    at androID.vIEw.VIEw$PerformClick.run(VIEw.java)10-27 16:43:49.448: E/AndroIDRuntime(16946):    at androID.os.Handler.handleCallback(Handler.java)10-27 16:43:49.448: E/AndroIDRuntime(16946):    at androID.os.Handler.dispatchMessage(Handler.java)10-27 16:43:49.448: E/AndroIDRuntime(16946):    at androID.os.Looper.loop(Looper.java)10-27 16:43:49.448: E/AndroIDRuntime(16946):    at androID.app.ActivityThread.main(ActivityThread.java)10-27 16:43:49.448: E/AndroIDRuntime(16946):    at java.lang.reflect.Method.invokeNative(Native Method)10-27 16:43:49.448: E/AndroIDRuntime(16946):    at java.lang.reflect.Method.invoke(Method.java:511)10-27 16:43:49.448: E/AndroIDRuntime(16946):    at com.androID.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java)10-27 16:43:49.448: E/AndroIDRuntime(16946):    at com.androID.internal.os.ZygoteInit.main(ZygoteInit.java)10-27 16:43:49.448: E/AndroIDRuntime(16946):    at dalvik.system.NativeStart.main(Native Method)

这个错误似乎是在Fragments3类中引起的,因为在Activity启动时,Fragments1处于活动状态,并且它的直接邻居Fragments2也被预加载.

解决方法 一对建议:

>如果您使用的是7个选项卡,则可以考虑使用VIEwPager.它将有助于加快用户体验. 总结

以上是内存溢出为你收集整理的android – 预加载所有碎片的视图?全部内容,希望文章能够帮你解决android – 预加载所有碎片的视图?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1126749.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-30
下一篇2022-05-30

发表评论

登录后才能评论

评论列表(0条)

    保存