0

Android 4ActionBar Tabs을 사용하고 있습니다. 5 Broadcast receivers이 있으며 모두 UI의 일부를 업데이트합니다. 내 앱에는 탭이 두 개 있습니다. 두 탭에는 서로 다른 UI가 연결되어 있습니다 (즉, 두 탭 모두 서로 다른 xml 파일을 가지고 있으며 탭 선택에 따라 팽창됩니다). 각 탭마다 조각을 부 풀리고 있습니다.ActionBar의 브로드 캐스트 수신기 및 탭 UI 개발

처음에는 하나의 탭만 보여주고 있습니다. 해당 탭과 연결된 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는, A and B가 호출되는 말할 때 그래서, 그들은 탭 1 인 UI를 업데이트 이전 탭의 UI로 대체됩니다 하지만 C가 수신되면 UI가 Tab2의 UI로 바뀌고 UI가 업데이트되지만, D and E이 수신되면 탭 1의 UI를 업데이트하려고 시도하지만 탭 2가 부풀려서 null 포인터 예외가 발생합니다 D and E이 변경하려고 한 성명서에

그렇다면 방송사에 따라 UI를 어떻게 업데이트해야합니까?

업데이트 : 이제 다음과 같이 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을 구현 한 이후로는 이해가 안 : 나는 Broadcast Receivers을받을 때마다 우선 나는이 무슨 짓을했는지 여기

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); 
    } 
} 
+0

지금이 질문에서 찾은 해결책을 공유 할 수 있다면 좋을 것입니다. – Flexo

답변

0

,,, 난 몰라 onReceive() 메서드에서 UI를 업데이트하는 대신 영구 저장 장치에받은 데이터를 저장하는 데 사용했습니다.

이벤트를 기반으로 새 탭을 만들었습니다. 이제 사용자가 새 탭으로 이동하면 해당 탭에 onCreateView()이 호출되고이 메소드에서 UI가 업데이트됩니다.

지금의 문제 :

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. 

나는 각 탭에 대한 각 onCreateView() 방법의 UI를 업데이트하지 않기 때문에.

관련 문제