Android 4
에 ActionBar 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);
}
}
지금이 질문에서 찾은 해결책을 공유 할 수 있다면 좋을 것입니다. – Flexo