2012-06-12 5 views
6

activity에는 fragments 두 개가 있습니다. 나는, 내가 그 조각에, 내가 가진, Fragment를 확장 두 개의 클래스가 <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를 얻는 것.

일부 브로드 캐스트 수신기가 첫 번째 프래그먼트를 업데이트 할 때 제대로 작동하지만 브로드 캐스트 수신기가 두 번째 프래그먼트를 활동에서 업데이트하면 NPE가 발생합니다.

내 질문 : 어떻게 부분을 업데이트해야합니까? 그것은 내 활동 안에 있어야합니까? 그렇다면 어떤 방법으로? 그렇지 않다면 어디에서 조각을 업데이트해야합니까?

제발 도와주세요!

+0

레이아웃 (R.layout.bfragment)은 두 조각에서 동일합니까? R.id.bTable은 두 조각 모두에 존재합니까? –

+0

두 레이아웃이 모두 비슷하게 보이는지 묻는다면 그러나 두 레이아웃은 이전 레이아웃을 대체하여 동일한 컨테이너에서 팽창합니다. – Shrikant

+0

R.id.b 테이블이 귀하의 컨테이너입니까? –

답변

25

활동 논리는 조각 논리와 분리되어야합니다.

귀하의 활동과 같은 논리 처리하도록되어

: 내가 대신 하나

의 조각을 표시해야하지만 당신의 활동은 논리의이 종류를 처리하기로 하지입니다

을 :

조각 내부 내용을 업데이트해야합니다.

조각의 내용을 업데이트하는 것은 책임입니다. 반면에 액티비티는 조각에 자신을 업데이트해야한다고 알릴 수 있습니다. BroadcastReceiver 당신이해야 뭔가 수신 활동에

updateContent(With Blabla) 

또는

updateContent() 

같은 그와

마음에, 당신의 조각이 노출한다 방법 :

  • 확인하는 조각이 현재 표시됩니다.
  • 조각에서 업데이트 할 내용 준비
  • updateContent(With Blabla) 메서드를 사용하여 조각을 업데이트하도록 요청하십시오.

또는

현재 updateContent() 방법으로 업데이트하기 위해 조각을 물어
  • 표시됩니다 조각
    • 확인합니다.

    응용 프로그램 비즈니스 논리에 따라 가장 간단한 방법을 선택하십시오.

  • +0

    답변 해 주신 Timothée Jeannin에게 감사드립니다. 이런 식으로 구현하겠습니다. – Shrikant

    +0

    문제가 없으면 더 많은 설명이 필요한지 물어보십시오. 프로젝트에 행운을 빈다. :) –

    +0

    고마워요. – Shrikant

    관련 문제