我在Android 4
中使用ActionBar Tabs
。我有5 Broadcast receivers
,並且他們都更新了UI的一部分。在我的應用程序中有兩個選項卡,這兩個選項卡具有不同的UI關聯(即,兩個選項卡都有不同的xml
文件與它們相關聯,根據選項卡選項,它將爲inflated
)。對於每個標籤,我都在爲fragment
充氣。使用廣播接收器和標籤在ActionBar中開發UI中的NPE
最初,我只顯示一個選項卡。在點擊與該選項卡關聯的用戶界面上的按鈕時,我添加了另一個選項卡,並收到5個廣播接收器。我以任何順序收到廣播接收器。現在說有以下廣播接收機:A B C D E
A, B, D and E updates the UI which is part of Tab 1.
C updates the UI which is part of Tab 2.
每當創建一個新的標籤,其用戶界面得到與前一個標籤的用戶界面所取代,所以當,說A and B
被調用,他們更新是從Tab 1
的用戶界面,但當收到C
時,用戶界面現在被替換爲Tab2's
用戶界面,並且它更新用戶界面,但是當收到D and E
時,他們嘗試更新tab 1
的用戶界面,但由於tab 2
現在被誇大了,因此我在該語句上得到空指針異常D and E
試圖進行更改。
所以請告訴我,我應該如何更新我的UI根據broadcasters
?
更新:現在,我得到NPE以下:這是我的接收器之一,在這裏我創建新的選項卡,並希望從廣播接收器插入表。
ActionBar actionbar = getActionBar();
actionbar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
ActionBar.Tab bTab = actionbar.newTab().setText("B");
bFragment = new BFragment();
bTab.setTabListener(new MyTabsListener(bFragment));
actionbar.addTab(bTab, true);
final LinearLayout linearLayout = (LinearLayout) findViewById(R.id.mdsTable); // NPE linearLayout is not getting initialized.
我不明白爲什麼會這樣,因爲我已經實現MyTabsListener
爲:
class MyTabsListener implements ActionBar.TabListener {
public Fragment fragment;
public MyTabsListener(Fragment fragment) {
this.fragment = fragment;
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
Toast.makeText(StartActivity.appContext, "Reselected!",
Toast.LENGTH_LONG).show();
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
ft.replace(R.id.fragment_container, fragment);
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
ft.remove(fragment);
}
}
更新:如果我評論的接收器部分(只檢查,如果我可以動態創建標籤),如果我在接收器外面寫同樣的東西,它運行沒有任何問題。
請幫幫我。