Q:

Kotlin update text of textview on different layout from activity

I have a navigation header as bellow
I want to update TextView in nav_header.xml from MainActivity.kt by Kotlin

I want to update text of TextView(id=drawer_user_name) from MainActivity.kt
main_activity.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.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/content_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">

        <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/recycler_view"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginTop="45dp"
            android:background="@android:drawable/screen_background_light_transparent"
            tools:listitem="@layout/item_list" />

    </LinearLayout>

    <com.google.android.material.navigation.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"
        app:menu="@menu/nav_menu" />

</androidx.drawerlayout.widget.DrawerLayout>

nav_header.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="200dp"
    android:background="#4cAF50"
    android:orientation="vertical"
    android:layout_gravity="top"
    android:paddingTop="35dp"
    android:paddingLeft="15dp"
    android:paddingBottom="15dp"
    android:id="@+id/ddd">

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@mipmap/ic_launcher"
        android:id="@+id/imageView"
        android:layout_marginBottom="15dp"/>

    <TextView
        android:id="@+id/drawer_user_name"    //--> i want to update this TextView from MainActivity.kt
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="title"
        android:textColor="#FFFFFF"
        android:textStyle="bold" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="this our navigation drawer"
        android:textColor="#FFFFFF" />

</LinearLayout>  

content_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    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">

    <com.google.android.material.appbar.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

        <androidx.appcompat.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/colorPrimary"
            android:background="?attr/colorPrimary"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:gravity="center_vertical"
                android:orientation="horizontal">

                <TextView
                    style="@style/TextAppearance.AppCompat.Widget.ActionBar.Title"
                    android:id="@+id/home_page_username"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Chat"
                    android:textColor="#FFFFFF" />
            </LinearLayout>

        </androidx.appcompat.widget.Toolbar>
    </com.google.android.material.appbar.AppBarLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="this is my content"/>
    </LinearLayout>

</LinearLayout>

Please Help me,I really need a way to solve this problem
thank you
Babbab forces us to write stories here to allow us to post a question(It looks like your post is mostly code; please add some more details)
Edit
my MainActivity.kt
package com.example.myapplication

...
import android.view.LayoutInflater
import android.widget.LinearLayout
import kotlinx.android.synthetic.main.activity_main_page.*
import kotlinx.android.synthetic.main.nav_header.view.*

class MainPageActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelectedListener,CustomAdapter.OnItemClickListener {

    lateinit var toolbar:androidx.appcompat.widget.Toolbar
    lateinit var drawerLayout: DrawerLayout
    lateinit var navView:NavigationView

    private var data = arrayListOf<UserChanel>()
    private lateinit var myadapter:CustomAdapter
    private val gson = Gson()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        toolbar =findViewById(R.id.toolbar)
        setSupportActionBar(toolbar)

        drawerLayout = findViewById(R.id.drawer_layout)
        navView = findViewById(R.id.nav_view)

        val toggle = ActionBarDrawerToggle(this,drawerLayout,toolbar,0,0)
        drawerLayout.addDrawerListener(toggle)
        toggle.syncState()
        navView.setNavigationItemSelectedListener(this)

//        val userNameTextView = nav_view.findViewById<TextView>(R.id.drawer_user_name)
//        userNameTextView.text = "SOME TEXT"   // error

        nav_view.drawer_user_name.text = "SOME TEXT"   // Error

       
        val recyclerview = findViewById<RecyclerView>(R.id.recycler_view)

        // for insert line divider to recyclerview items
        recyclerview.addItemDecoration(SimpleDividerItemDecoration(this)) // for insert line divider to recyclerview items

        send_request()

        val adapter = CustomAdapter(this,data,this)
        recyclerview.layoutManager = LinearLayoutManager(this)
        recyclerview.adapter = adapter
        recyclerview.setHasFixedSize(true)
        myadapter = adapter

    }

    override fun onNavigationItemSelected(item: MenuItem): Boolean {
        when(item.itemId){
            R.id.nav_profile->{
                Toast.makeText(this,"profile clicked",Toast.LENGTH_SHORT).show()
            }
            R.id.nav_message->{
                Toast.makeText(this,"message clicked",Toast.LENGTH_SHORT).show()
            }
            R.id.nav_frinds->{
                Toast.makeText(this,"frinds clicked",Toast.LENGTH_SHORT).show()
            }
            R.id.nav_update->{
                Toast.makeText(this,"update clicked",Toast.LENGTH_SHORT).show()
            }
            R.id.nav_logout->{
                Toast.makeText(this,"logout clicked",Toast.LENGTH_SHORT).show()
            }
        }
        drawerLayout.closeDrawer(GravityCompat.START)
        return true
    }
    private fun send_request(){
       ...
    }

    override fun onItemClick(position: Int,adapter: CustomAdapter,v:View) {
        ...
    }

}

A:

You can find the target view from its parent in your activity like either of these ways:
nav_view.getHeaderView(0).findViewById<TextView>(R.id.drawer_user_name).text = "SOME TEXT"

or
import kotlinx.android.synthetic.main.nav_header.view.*
...

nav_view.getHeaderView(0).drawer_user_name.text = "SOME TEXT"

It's possible to access the header view using getheaderview(int index) according to the documentation. As you have one header view in the NavigationView, it is accessible by index 0.

