从另一个布局更改 TextView

Dan*_*Kng 3 android android-layout

对于我在 Android 中的最新项目,我需要从 myTextView中设置一个R.layout.header(我的 NavDrawer 的内容,请参阅下面的屏幕截图) MainActivity,它使用activity_main布局。

为此,我调用我的SetUsername()方法,其中包含以下代码以从首选项中获取用户名:

private void SetUsername(){
    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
    String userNamePref = preferences.getString("username", "DEFAULT");
    //Change the Username in R.layout.header
}
Run Code Online (Sandbox Code Playgroud)

要设置用户名,我首先做了

TextView username = (TextView)findViewById(R.id.usernameHeader);
username.setText(userNamePref);
Run Code Online (Sandbox Code Playgroud)

这不起作用 - 显然,因为R.id.usernameHeader位于R.layout.header中。

所以我用了这个:

setContentView(R.layout.header);
TextView username = (TextView)findViewById(R.id.usernameHeader);
username.setText(userNamePref);
Run Code Online (Sandbox Code Playgroud)

这正确地改变了我的 NavDrawer 中的文本,但是activty_main布局消失了,所以我setContentView(R.layout.activity_main)在函数的底部添加了。一切都按预期进行,但文本没有改变。

为了获得更好的想法,我制作了一个屏幕截图,以便您可以看到我到底想要更改什么: 导航抽屉

我的布局:

活动_main.xml:

    <?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/drawer"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:context=".MainActivity">

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/bg_screen3">
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:gravity="center_horizontal"
        android:orientation="vertical"
        android:id="@+id/linearLayout">

        <ImageView
            android:layout_width="@dimen/img_width_height"
            android:layout_height="@dimen/img_width_height"
            android:src="@drawable/ic_assessment_white_36dp"/>

        <TextView
            android:id="@+id/stundenplanText"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/slide_2_title"
            android:textColor="@android:color/white"
            android:textSize="@dimen/slide_title"
            android:textStyle="bold" />

        <Spinner
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/class_spinner"
            android:layout_below="@+id/linearLayout"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/button_start"
            android:id="@+id/okay_button"
            android:elevation="5dp"
            android:layout_below="@+id/linearLayout"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="39dp">
        </Button>
    </LinearLayout>
    <include
        android:id="@+id/tool_bar"
        layout="@layout/toolbar">
    </include>
</RelativeLayout>
    <android.support.design.widget.NavigationView
        android:id="@+id/navigation_view"
        android:layout_height="match_parent"
        android:layout_width="wrap_content"
        android:layout_gravity="start"
        app:headerLayout="@layout/header"
        app:menu="@menu/drawer"
        />
</android.support.v4.widget.DrawerLayout>
Run Code Online (Sandbox Code Playgroud)

标头:

 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="190dp"
    android:background="@color/bg_screen3"
    android:orientation="vertical"
    android:id="@+id/headerRelative">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="BT-Ahaus"
        android:textSize="14sp"
        android:textColor="#FFF"
        android:textStyle="bold"
        android:gravity="left"
        android:paddingBottom="4dp"
        android:id="@+id/usernameHeader"
        android:layout_above="@+id/email"
        android:layout_alignParentStart="true"
        android:layout_marginStart="30dp" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="bt-ahaus@justanotherschool.de"
        android:id="@+id/email"
        android:gravity="left"
        android:layout_marginBottom="8dp"
        android:textSize="14sp"
        android:textColor="#fff"
        android:layout_alignParentBottom="true"
        android:layout_alignLeft="@+id/usernameHeader"
        android:layout_alignStart="@+id/usernameHeader" />

    <ImageView
        android:id="@+id/profile_image"
        android:layout_width="150dp"
        android:layout_height="100dp"
        android:src="@drawable/bt_ahaus"
        android:layout_centerVertical="true"
        android:layout_alignEnd="@+id/email" />

</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

工具栏:

  <?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/bg_screen3"
    android:theme="@style/ThemeOverlay.AppCompat.Dark"
    android:elevation="4dp">

</android.support.v7.widget.Toolbar>
Run Code Online (Sandbox Code Playgroud)

ear*_*jim 5

切换ContentView是完全没有必要的。

View要在标题布局上查找,您需要findViewById调用该特定布局的实例。

而不是以下内容:

TextView username = (TextView) findViewById(R.id.usernameHeader);
Run Code Online (Sandbox Code Playgroud)

您应该执行以下操作:

NavigationView navigationView = (NavigationView) findViewById(R.id.navigation_view);
View header = navigationView.getHeaderView(0);
TextView username = (TextView) header.findViewById(R.id.usernameHeader);
Run Code Online (Sandbox Code Playgroud)