0

我正在使用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'sUI 替换,并且它会更新 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);
    }
}

更新:如果我评论接收器部分(只是检查我是否可以动态创建选项卡)并且如果我在接收器之外编写相同的东西,它运行没有任何问题。

请帮我。

4

2 回答 2

0

好吧,很可能您没有将带有 id 的视图关联mdsTable到当前布局。仅凭这些代码示例很难确定问题的根源。哪个布局mdsTable在其中,你在哪里膨胀这个布局?

于 2012-06-11T13:49:32.260 回答
0

我已经通过以下方式解决了这个问题:

当我BroadCastReceivers被调用时,我保存onReceive()方法中传入的所有数据,当用户移动到任何选项卡时,它onCreateView()被调用,所以我在这个方法中更新 UI,所以没有问题直接从 Tab2 直接进入 Tab1,它会一切都基于用户的选择,当他想从 tab2 转到 Tab1 时,UI 将得到更新并因此NPE得到解决。

于 2012-08-24T06:13:41.140 回答