で使用ActionBar Tabs
していAndroid 4
ます。私は5つ持ってBroadcast receivers
いますが、それらすべてがUIの一部を更新します。私のアプリには2つのタブがあり、両方のタブに異なるUIが関連付けられています(つまり、両方のタブに異なるxml
ファイルが関連付けられており、inflated
タブの選択に応じて異なります)。タブごとに、を膨らませていfragment
ます。
最初は、タブを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
呼び出されると、からのUIが更新されますTab 1
が、C
受信されると、UIはUIに置き換えられ、 UIがTab2's
更新されます。しかし、D and E
が受信されると、のUIを更新しようとしますtab 1
が、現在は膨張しているため、変更を試みたtab 2
ステートメントでnullポインター例外が発生します。D and E
では、UIに応じてどのように更新すればよいのか教えてくださいbroadcasters
。
更新:今、私は次のように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);
}
}
更新:レシーバー部分にコメントを付け(タブを動的に作成できるかどうかを確認するだけで)、レシーバーの外部で同じことを記述しても、問題なく実行されます。
私を助けてください。