初始狀態:預載所有片段的視圖?
您好,我目前正在更新現有應用程式,並與一個特定活動的問題。它包含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的錯誤 –
感謝您花時間來構建/格式化您的問題:) –