0

で使用ActionBar TabsしていAndroid 4ます。私は 5 を持ってBroadcast receiversいますが、それらはすべて UI の一部を更新します。私のアプリには 2 つのタブがあり、両方のタブには異なる UI が関連付けられています (つまり、両方のタブには異なる xml ファイルが関連付けられており、タブの選択に応じて拡張されます)。タブごとに、フラグメントを膨らませています。

最初は、1 つのタブのみを表示しています。そのタブに関連付けられた 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呼び出されると、タブ 1 からの UI が更新されますが、C が受信されると、UI は Tab2 の UI に置き換えられます。 UIを更新しますが、D and E受信するとタブ1のUIを更新しようとしますが、タブ2が膨張しているD and Eため、変更を試みたステートメントでnullポインター例外が発生します。

教えてください、放送局に合わせて UI を更新するにはどうすればよいですか?

更新:現在、次のように NPE を取得しています: これは受信機の 1 つの内部にあり、ここで新しいタブを作成しており、放送受信機からテーブルを挿入したいと考えています。

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

1 に答える 1

0

Here what I did is, first of all, whenever I receive Broadcast Receivers, I don't update the UI in onReceive() method, instead I used to save the data that I receive into persistent storage.

And based on the event, I used to create a new Tab. And now when user navigated to new Tab, the onCreateView() is called for that tab and I update the UI in this method.

So no problem of:

Whenever a new tab is created, its UI gets replaced with previous tab's UI, so when, say A and B gets called, they update the UI which is from Tab 1, but when C is received, the UI is now replaced with Tab2's UI, and it updates the UI, but when D and E is received, they try to update the UI of tab 1, but since tab 2 is now inflated, I get null pointer exception on that statement on which D and E tried to make change.

since I update the UI in each onCreateView() method for each Tab.

于 2012-08-06T13:58:04.373 に答える