我正在使用ActionBar Tabs
. Android 4
我有 5 个Broadcast receivers
,它们都更新了 UI 的一部分。我的应用程序中有两个选项卡,两个选项卡都有不同的 UI 关联(即两个选项卡有不同的xml
文件关联,这将inflated
根据选项卡选择)。对于每个选项卡,我都在膨胀一个fragment
.
最初,我只显示一个选项卡。单击与该选项卡关联的 UI 中的按钮时,我添加了另一个选项卡,并收到 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.
每当创建一个新选项卡时,它的 UI 都会被前一个选项卡的 UI 替换,所以当比如说A and B
被调用时,它们会更新来自 的 UI Tab 1
,但是当C
接收到时,UI 现在会被Tab2's
UI 替换,并且它会更新 UI,但是当D and E
收到时,他们会尝试更新 的 UI tab 1
,但由于现在已膨胀,因此我在尝试进行更改tab 2
的语句上出现空指针异常。D and E
所以请告诉我,我应该如何根据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);
}
}
更新:如果我评论接收器部分(只是检查我是否可以动态创建选项卡)并且如果我在接收器之外编写相同的东西,它运行没有任何问题。
请帮我。