Назначить изображение на заголовок навигационного ящика - PullRequest
0 голосов
/ 14 сентября 2018

Я пытаюсь восстановить данные из базы данных (Firebase) и назначить эти данные пользовательской странице, точно в заголовке навигационной панели.

Я создал заголовок XML и включил заголовок в Activity_main, где я создал блок навигации В шапке у меня видение картинок и два textview.

Код вида деятельности:

<include
    android:id="@+id/main_page_toolbar"
    layout="@layout/app_bar_layout" />


<android.support.v4.widget.DrawerLayout
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:openDrawer="end">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="@color/colorPrimary"
            android:elevation="4dp"
            android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
            app:popupTheme="@style/AlertDialog.AppCompat.Light" />

        <FrameLayout
            android:id="@+id/fragment_container"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    </LinearLayout>

    <android.support.design.widget.NavigationView
        android:id="@+id/nav_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:background="@color/colorPrimary"
        app:headerLayout="@layout/nav_header"

        app:itemIconTint="@color/colorAccent"
        app:itemTextColor="@color/colorAccent"
        app:menu="@menu/main_menu" />

</android.support.v4.widget.DrawerLayout>

Теперь для Java я создал класс, в котором я восстанавливаю пользовательские данные из базы данных

    mCurrentUser = FirebaseAuth.getInstance().getCurrentUser();
        String current_uid = mCurrentUser.getUid();
        mUserData = FirebaseDatabase.getInstance().getReference().child("User").child(current_uid);

    mUserData.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            name = dataSnapshot.child("name").getValue().toString();
            image = dataSnapshot.child("image").getValue().toString();
            status = dataSnapshot.child("status").getValue().toString();
            thumb_image = dataSnapshot.child("thumb_image").getValue().toString();
        }

Итак, в основном упражнении я хочу назначить изображение, имя пользователя и статус заголовку навигации.

    //NavigationView
    drawer = findViewById(R.id.drawer_layout);
    NavigationView navigationView = findViewById(R.id.nav_view);
    navigationView.setNavigationItemSelectedListener(this);

    UserData userData = new UserData();(ImageView)navigationView.findViewById(R.id.imageViewUserImage);
    TextView nav_userName = (TextView)navigationView.findViewById(R.id.textViewUsername);
    TextView nav_userStatus = (TextView)navigationView.findViewById(R.id.textViewUserStatus);

    nav_userName.setText(userData.name);
    nav_userStatus.setText(userData.status);

В результате у меня произошел сбой приложения при запуске приложения. Я не знаю, является ли проблема, которую я использую, чтобы получить изображение или текстовое представление в заголовке, проблемой или чем-то еще.

Это мое первое приложение, мой код немного «грязный», поэтому я не включил здесь полный код.

Ответы [ 3 ]

0 голосов
/ 14 сентября 2018

Вы лучше найдете свои виды внутри NavigationDrawer, используя DrawerLayout следующим образом

TextView nav_userName = (TextView)drawer.findViewById(R.id.textViewUsername);
TextView nav_userStatus = (TextView)drawer.findViewById(R.id.textViewUserStatus);

вместо

TextView nav_userName = (TextView)navigationView.findViewById(R.id.textViewUsername);
TextView nav_userStatus = (TextView)navigationView.findViewById(R.id.textViewUserStatus);
0 голосов
/ 14 сентября 2018

Нашел ответ,

    View header = navigationView.getHeaderView(0);

    ImageView nav_userImage = header.findViewById(R.id.imageViewUserImage);
    TextView nav_userName = header.findViewById(R.id.textViewUsername);
    TextView nav_userStatus = header.findViewById(R.id.textViewUserStatus);

Это решило проблему, необходимую для указания на индекс представления заголовка.Спасибо, ребята.

0 голосов
/ 14 сентября 2018

Попробуйте распечатать значения userData.name и userData.status перед установкой значений. Я думаю, что они оба равны нулю.

...