Android Api 23 Navigationsansicht ändern headerLayout textview

Lesezeit: 6 Minuten

Android Api 23 Navigationsansicht andern headerLayout
Benutzer3065901

Ich teste das Beispielprojekt für die Navigationsleiste in Android und habe ein Problem beim Festlegen des Texts in der Kopfzeile des Navigationsansichtsprofils.

Das ist mein Code:

MainActivity.java

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                    .setAction("Action", null).show();
        }
    });

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
            this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
    drawer.setDrawerListener(toggle);
    toggle.syncState();

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

    TextView text = (TextView) findViewById(R.id.textView);
    texto.setText("HELLO");
}

Aktivität_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:id="@+id/drawer_layout"
android:layout_width="match_parent" android:layout_height="match_parent"
android:fitsSystemWindows="true" tools:openDrawer="start">

<include layout="@layout/app_bar_main" android:layout_width="match_parent"
    android:layout_height="match_parent" />

<android.support.design.widget.NavigationView android:id="@+id/nav_view"
    android:layout_width="wrap_content" android:layout_height="match_parent"
    android:layout_gravity="start" android:fitsSystemWindows="true"
    app:headerLayout="@layout/nav_header_main" app:menu="@menu/activity_main_drawer" />

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

nav_header_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="@dimen/nav_header_height"
android:background="@drawable/side_nav_bar"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:theme="@style/ThemeOverlay.AppCompat.Dark" android:orientation="vertical"
android:gravity="bottom">

<ImageView android:layout_width="wrap_content" android:layout_height="wrap_content"
    android:paddingTop="@dimen/nav_header_vertical_spacing"
    android:src="https://stackoverflow.com/questions/33199764/@android:drawable/sym_def_app_icon" android:id="@+id/imageView" />

<TextView android:layout_width="match_parent" android:layout_height="wrap_content"
    android:paddingTop="@dimen/nav_header_vertical_spacing" android:text="Android Studio"
    android:textAppearance="@style/TextAppearance.AppCompat.Body1" />

<TextView android:layout_width="wrap_content" android:layout_height="wrap_content"
    android:text="[email protected]" android:id="@+id/textView" />

</LinearLayout>

Wenn ich versuche, den Text der Textansicht zu setzen, bekomme ich immer diesen Fehler und es passiert nur mit API-Level 23:

java.lang.NullPointerException: Attempt to invoke virtual method   'void android.widget.TextView.setText(java.lang.CharSequence)' on a null   object reference

Wie kann ich den Textview-Text der nav_header_main.xml von der Hauptaktivität ändern??

Vielen Dank im Voraus

  • Habe das gleiche Problem. Vielleicht ein Problem mit der Bibliothek?

    – BigDX

    18. Okt ’15 um 17:21

  • Ich habe dieses Problem auch – eingeführt mit den Abhängigkeiten in com.android.support:* 23.1.0 . Die Rückkehr zu 23.0.1 hat es behoben, also bleibe ich dabei, bis es behoben ist.

    – Carl Whalley

    18. Okt ’15 um 19:52

  • Gleiches Problem hier… Ich denke, es ist ein Fehler in Neu com.android.support:* 23.1.0….

    – Vipin Kumar

    20. Okt ’15 um 7:12

  • Dies ist in der Tat ein Problem mit der Design-Support-Bibliothek 23.1.0. Da die zugrunde liegende Implementierung für die NavigationView jetzt eine RecyclerView ist, wird das Header-Layout zur Laufzeit nicht aufgeblasen. Siehe Link hier: stackoverflow.com/questions/33364276/…

    – HappyKatz

    4. November ’15 um 8:14


  • Übrigens: So etwas lässt mich schaudern für die Zukunft des selbstfahrenden Autos!

    – HappyKatz

    4. November ’15 um 8:15

Mit der Version 23.1.1 der Design Support Library können Sie jetzt

View header = navigationView.getHeaderView(0)
TextView text = (TextView) header.findViewById(R.id.textView);

  • Sie können auch verwenden navigationView.getHeaderCount() falls Sie aus irgendeinem Grund mehr als 1 Header haben.

    – Francois Dermu

    13. November ’15 um 18:51

  • Dies ist die richtige Antwort ab 23.1.1 der Supportbibliothek.

    – Cybergen

    3. Feb. ’16 um 17:50

  • Hat bei mir funktioniert: support-v4:24.1.1

    – Moujib

    2. August ’16 um 21:42

1641740943 867 Android Api 23 Navigationsansicht andern headerLayout
orium

Ich hatte das gleiche Problem und konnte es mit diesem Code vermeiden:

    View header = LayoutInflater.from(this).inflate(R.layout.nav_header_main, null);
    navigationView.addHeaderView(header);
    TextView text = (TextView) header.findViewById(R.id.textView);
    text.setText("HELLO");

  • Gute Antwort. Funktioniert perfekt

    – BigDX

    19. Okt. 15 um 1:58 Uhr

  • Wenn dies die einzige Lösung ist, warum haben wir dann eine XML-Datei? Gibt es keine Möglichkeit, über XML selbst zu ändern?

    – bks4line

    13. November ’15 um 5:50


  • Dies funktioniert gut, entfernen Sie ` app:headerLayout=”@layout/nav_header_main”`, um doppelte Header zu vermeiden.

    – Gpak

    1. Juni ’16 um 8:58

  • Beim LayoutInflater.from(this).inflate(R.layout.nav_header_main, null);, beschwert sich AndroidStudio mit Avoid passing null as the view root (needed to resolve layout parameters on the inflated layout's root element). Gibt es eine Möglichkeit, dies zu beheben?

    – Alexander

    27. September ’16 um 3:58

  • Ich erhalte immer noch den gleichen Absturz, wenn ich eine Debug-Apk bereitstelle, jedoch funktioniert jeder App-Start danach ordnungsgemäß …

    – DoruChidean

    16. Februar ’17 um 9:29

Die Orium-Antwort funktioniert und dies wird auch funktionieren.

View header = navigationView.inflateHeaderView(R.layout.nav_header_main);
    TextView text = (TextView) header.findViewById(R.id.textView);
    texto.setText("HELLO");

das hat das problem bei mir gelöst

    View headerView = navigationView.inflateHeaderView(R.layout.header_view);

    txt_fullname = (TextView) headerView.findViewById(R.id.txt_fullname);
    txt_email = (TextView) headerView.findViewById(R.id.txt_email);

View headerView=navigationView.getChildAt(0);
TextView tvName=(TextView)hView.findViewById(R.id.name);
TextView tvEmail=(TextView)hView.findViewById(R.id.email);

    tvName.setText(data);
    tvEmail.setText(data);

  • Diese Lösung funktioniert. Ich habe auch versucht: textView = navigationView.getHeaderView(0).findViewById(R.id.textview); und View header = LayoutInflater.from(this).inflate(R.layout.menu_header, null); navigationView.addHeaderView(header); textView = header.findViewById(R.id.textview); aber leider ohne erfolg. Ich weiß nicht warum.

    – Eine Anzeige

    9. Mai ’18 um 11:01

Android Api 23 Navigationsansicht andern headerLayout
TarikW

Oder wenn Sie dieses Attribut verwenden:

<android.support.desibn.widget.NavigationView>
    ...
    app:headerLayout="@layout/your_header_layout"/>

Sie können:

View header = mNavigationView.getHeaderView(0);
TextView title = (TextView) header.findViewById(R.id.your_title_id);
//Or something else

  • Diese Lösung funktioniert. Ich habe auch versucht: textView = navigationView.getHeaderView(0).findViewById(R.id.textview); und View header = LayoutInflater.from(this).inflate(R.layout.menu_header, null); navigationView.addHeaderView(header); textView = header.findViewById(R.id.textview); aber leider ohne erfolg. Ich weiß nicht warum.

    – Eine Anzeige

    9. Mai ’18 um 11:01

1641740943 112 Android Api 23 Navigationsansicht andern headerLayout
Md Imran Choudhury

Die obige Antwort ist richtig, aber in kotlin müssen Sie verwenden findViewById<View>

   val navigationHeader = navigation_view.getHeaderView(0)
        val navigationTitle = navigationHeader.findViewById<View>(R.id.txt_navigation_title) as TextView
        navigationTitle.text = "This is your header"

.

220150cookie-checkAndroid Api 23 Navigationsansicht ändern headerLayout textview

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy