2012-06-12 2 views
6

activityには2つのfragmentsがあります。私は、私はそのフラグメントに、私が持っている、Fragmentを拡張する2つのクラスを持っている<fragment/>タグを使用していない:フラグメントとブロードキャストレシーバ

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     return inflater.inflate(R.layout.bfragment, container, false); // this will inflate the Fragment in activity. 
    } 

今の問題は、私はいくつかの受信機がからUIを更新し、そこから活動のいくつかの放送受信機を受け付けておりますされます最初のフラグメントといくつかはUIを2番目から更新します。

私のメインacitivityで定義された私の放送受信機の一つは、次のとおりです。

private BroadcastReceiver bcReceived = new BroadcastReceiver() { 

     @Override 
     public void onReceive(Context arg0, Intent intent) { 
      Log.d("", "BC Object Received"); 

      ActionBar actionbar = getActionBar(); 
      actionbar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
      ActionBar.Tab bTab = actionbar.newTab().setText("B"); 
      Fragment fragment = new BFragment(); 
      bTab.setTabListener(new MyTabsListener(fragment)); 
      actionbar.addTab(bTab, true); 

      final LinearLayout linearLayout = (LinearLayout) findViewById(R.id.bTable); // Getting null pointer exception here. linearLayout is not getting initialized. 

私は上記のLinearLayoutを使用して、それでビューを膨らませるためにそれを使用したいと思います。しかし、NPEを取得する。

ここで、一部のブロードキャスト受信者が最初のフラグメントを更新すると正常に動作しますが、ブロードキャスト受信者が2番目のフラグメントをアクティビティから更新するとNPEを取得します。

私の質問はどのようにしてフラグメントを更新すればよいですか?それは私の活動の中にあるべきですか?はいの場合はどの方法ですか?そうでなければ、どこでフラグメントを更新すべきですか?

私を助けてください!

+0

レイアウト(R.layout.bfragment)は2つのフラグメントで同じですか? R.id.bTableは両方のフラグメントに存在するかどうか? –

+0

両方のレイアウトが似ていないかどうかを尋ねる場合は、いいえ。しかし、両方のレイアウトは前のレイアウトを置き換えることによって同じコンテナ内で膨張します。 – Shrikant

+0

R.id.bTableはあなたのコンテナですか? –

答えて

25

あなたのアクティビティロジックは、フラグメントロジックから分離する必要があります。

あなたの活動が似ロジックを処理することになっている:

私が代わりにその1

のこのフラグメントを表示する必要がある。しかし、あなたの活動はは、この種のロジックを処理するために想定されていません:

フラグメント内の内容を更新する必要があります

フラグメントの内容を更新する責任があります。 一方、アクティビティは、フラグメントを更新する必要があることをフラグメントに通知することがあります。念頭に置いて

BroadcastReceiverは、あなたがしなければならない何かを受信したときに、あなたのフラグメントは、あなたの活動で

updateContent(With Blabla) 

OR

updateContent() 

のようなメソッドを公開する必要がありますが:

  • 確認されフラグメントは現在表示されています
  • フラグメント内で更新するコンテンツを準備する
  • フラグメントをupdateContent(With Blabla)メソッドで更新するように依頼する。

OR

  • 現在
  • updateContent()方法で自身を更新するために、フラグメントを掲載し表示されるフラグメントを確認します。

アプリケーションビジネスロジックに従って最も簡単な方法を選択しました。

+0

あなたの答えティモテ・ジャンニンに感謝します。このように私にそれを実装させてください。 – Shrikant

+0

問題はありません、あなたはより多くの説明が必要かどうか質問してください。あなたのプロジェクトに幸運。 :) –

+0

ありがとうございます。 – Shrikant

関連する問題