初始状态:预载所有片段的视图?
您好,我目前正在更新现有应用程式,并与一个特定活动的问题。它包含7个选项卡,在这些选项卡中有不同方法的几个图像按钮和文字浏览。
在应用程序的原始版本中,我使用了一个tabhost,并且基本上拥有一个xml文件和一个java文件所需的所有内容,但是无法将tabcontent横向滑动以更改制表符,因此我创建了整个事情再次与片段。
挑战:
在动作条,我有一个过滤器按钮,是应该隐藏所有标签中的某些textviews和imagebuttons,通过检查标志,然后调用所有的7种片段类的方法,然后在其rootView中将视图设置为GONE并且如果再次切换到VISIBLE。
问题:
这个动作条按钮做工精细,如果用户翻阅所有的标签,但是,如果在应用程序的冷启动点击,它会崩溃的应用程序与空指针异常。 我怀疑这是因为还没有加载所有片段。
问:
我应该预装的所有片段在活动的开始? 如果是这样,我将如何做,并在什么文件将完成? 有没有另一种可能更好的方法来确保我可以操作ActionBar中的所有标签/片段,即使我不知道,之前已经打开了哪些片段? 我应该将所有这些方法混合在一个全局方法中吗?它会去哪个文件?
目前,它只适用于,如果您先滚动所有标签,然后我可以根据需要经常切换过滤器。
代码:
这被称为在活动等级:
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 VM
10-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: main
10-27 16:43:49.448: E/AndroidRuntime(16946): java.lang.NullPointerException
10-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类中引起的,因为活动开始时,Fragments1处于活动状态,并且其直接邻居Fragments2也被预加载。
你能添加更多关于'NullPointerException'的信息吗? –
添加了logcat的错误 –
感谢您花时间来构建/格式化您的问题:) –