在布局膨胀之前触发MutableLiveData的观察者

时间:2017-07-20 07:27:55

标签: android android-layout android-architecture-components android-livedata

我有一个Public Function GetSelectedSlicerItems(SlicerName As String) As String Dim oSc As SlicerCache Dim oSi As SlicerItem Dim lCt As Long On Error Resume Next Application.Volatile Set oSc = ThisWorkbook.SlicerCaches(SlicerName) If Not oSc Is Nothing Then For Each oSi In oSc.SlicerItems If oSi.Selected Then GetSelectedSlicerItems = GetSelectedSlicerItems & oSi.Name & ", " lCt = lCt + 1 ElseIf oSi.HasData = False Then lCt = lCt + 1 End If Next If Len(GetSelectedSlicerItems) > 0 Then If lCt = oSc.SlicerItems.Count Then GetSelectedSlicerItems = "All" Else GetSelectedSlicerItems = Left(GetSelectedSlicerItems, Len(GetSelectedSlicerItems) - 2) End If Else GetSelectedSlicerItems = "No items selected" End If Else GetSelectedSlicerItems = "No slicer with name '" & SlicerName & "' was found" End If End Function ,其中包含抽屉菜单的MainActivityNavigationView的标头包含NavigationView,我想要填充一些用户信息。 问题是,有时应用程序在TextView方法中使用onChanged崩溃,因为NullPointerExceptiontextUsername。我的猜测是因为布局还没有完全膨胀。我已经实施了null检查(如下面的代码所示),这显然只会导致null在大多数情况下为空。

我的textUsername方法如下所示:

onCreate

在从回调中访问布局之前,如何确保该布局膨胀?感谢。

修改

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mainViewModel = ViewModelProviders.of(this).get(MainViewModel.class); mainDrawerLayout = (DrawerLayout) findViewById(R.id.main_drawer_layout); mainNavigationView = (NavigationView) findViewById(R.id.main_navigation_view); mainContentLayout = (CoordinatorLayout) findViewById(R.id.main_content_layout); // get user information NetworkController.getInstance().getCurrentUser(Utils.getAuthenticationToken(), new NetworkController.GetUserResponseCallback() { @Override public void onGetUser(Response<UserResponse> response) { if(response.isSuccessful() && response.body() != null && response.body().isSuccess()) { mainViewModel.setCurrentUser(response.body().getUser()); } } @Override public void onRequestFailed(Throwable throwable) { } }); mainViewModel.getCurrentUser().observe(this, new Observer<User>() { @Override public void onChanged(@Nullable User user) { TextView textUsername = (TextView) mainNavigationView.findViewById(R.id.drawer_header_username); if(textUsername != null) { textUsername.setText(user.getProfile().getUsername()); } } }); }

activity_main.xml

<?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" tools:openDrawer="start" android:id="@+id/main_drawer_layout"> <include layout="@layout/activity_main_content" android:layout_width="match_parent" android:layout_height="match_parent" /> <android.support.design.widget.NavigationView android:id="@+id/main_navigation_view" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" android:fitsSystemWindows="true" app:headerLayout="@layout/drawer_menu_header" app:menu="@menu/main_drawer_menu"> </android.support.design.widget.NavigationView> </android.support.v4.widget.DrawerLayout>

activity_main_content.xml

<?xml version="1.0" encoding="utf-8"?> <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/main_content_layout"> <!-- setup the toolbar --> <android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/AppTheme.AppBarOverlay"> <android.support.v7.widget.Toolbar android:id="@+id/main_toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" android:elevation="@dimen/toolbar_elevation" android:popupTheme="@style/AppTheme.PopupOverlay"> </android.support.v7.widget.Toolbar> </android.support.design.widget.AppBarLayout> <!-- include the fragment container --> <android.support.constraint.ConstraintLayout xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:activity="com.fishley.android.activities.MainActivity" android:id="@+id/main_fragment_container" android:paddingTop="?attr/actionBarSize"> </android.support.constraint.ConstraintLayout> <android.support.design.widget.FloatingActionButton android:id="@+id/fab_new_post" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom|end" android:layout_margin="@dimen/fab_margin" android:src="@drawable/ic_plus" android:tint="@android:color/white" android:visibility="gone"/> </android.support.design.widget.CoordinatorLayout>

drawer_menu_header.xml

0 个答案:

没有答案