탐색 창 헤더에서 TextView의 텍스트를 변경하는 방법은 무엇입니까?
탐색 창 헤더 내에서 TextView의 텍스트를 변경하고 싶습니다. 하지만이 오류가 발생합니다.
java.lang.NullPointerException : null 객체 참조에서 가상 메소드 'void android.widget.TextView.setText (java.lang.CharSequence)'호출 시도
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:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:openDrawer="start">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<include
layout="@layout/app_bar_main"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<FrameLayout
android:id="@+id/frame_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="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 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/slide_nav_bar"
android:gravity="bottom"
android:orientation="vertical"
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">
<ImageView
android:id="@+id/tvHeaderIcon"
android:layout_width="60dp"
android:layout_height="60dp"
android:paddingTop="@dimen/nav_header_vertical_spacing"
android:src="@android:drawable/sym_def_app_icon" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="@dimen/nav_header_vertical_spacing"
android:text="@string/app_name"
android:textAppearance="@style/TextAppearance.AppCompat.Body1" />
<TextView
android:id="@+id/tvHeaderName"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
MainActivity.java
TextView tvHeaderName;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvHeaderName= (TextView) findViewById(R.id.tvHeaderName);
tvHeaderName.setText("Saly");
}
어떻게 할 수 있습니까?
navigationView에서 getHeaderView` 사용
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
View headerView = navigationView.getHeaderView(0);
TextView navUsername = (TextView) headerView.findViewById(R.id.navUsername);
navUsername.setText("Your Text Here");
먼저 NavigationView에서 헤더 레이아웃을 확장해야합니다.
navHeaderView= navigationView.inflateHeaderView(R.layout.nav_header_main);
tvHeaderName= (TextView) navHeaderView.findViewById(R.id.tvHeaderName);
tvHeaderName.setText("Saly");
23.1.1 설계 지원 라이브러리부터 사용할 수도 있습니다.
View header = navigationView.getHeaderView(0)
TextView text = (TextView) header.findViewById(R.id.textView);
참조 : https://stackoverflow.com/a/33692431/2761923
다음은 코드의 Kotlin 버전입니다. 다른 사람에게 도움이되기를 바랍니다.
val navigationView : NavigationView = findViewById(R.id.nav_view)
val headerView : View = navigationView.getHeaderView(0)
val navUsername : TextView = headerView.findViewById(R.id.txtUserName)
val navUserEmail : TextView = headerView.findViewById(R.id.txtEmail)
navUsername.text = username.toString()
navUserEmail.text = email.toString()
이것을 사용하여 탐색 헤더를 가져옵니다.
View hview = navigationView.getHeaderView(0);
그런 다음 hview를 사용하여 탐색 헤더의 다른보기를 얻고 원하는대로 수행하십시오.
else using navHeaderView= navigationView.inflateHeaderView(R.layout.nav_header_main);
this is creating a new header at index 1.
Intially, we have to get the instance of navigation view by inflating the navigation view in a view varible, later you can get the textView instance to edit the textview
What worked for me? its this:-
View linearLayout=navigationView.inflateHeaderView(R.layout.nav_header_main);
TextView name = linearLayout.findViewById(R.id.welcomenametext);
But remember to remove this from your xml file i.e from NavigationView :-app:headerLayout="@layout/nav_header_main"
Ok apart from this above answer..over months i now figured there's a better way of doing it if you are advanced enough in android development!!Just put frame layout there and load fragment in it inside which we have Recyclerview and header section. With Recyclerview You can setup the header as you like with textviews,image,and many more as you like. The recent application I am working on just did that.Dynamically passed data into Recyclerview from fragmentactivity with out icons and also put a relative layout(inside textviews and imageview) which acts as header on top of Recyclerview.
You need to get NavigationView id in your Activity like this
NavigationView navigationView = (NavigationView) findViewById(R.id.navigationView );
Now get HeaderView Layout using Navigationview id like this
View headerView = navigationView.getHeaderView(0);
Now you can get Any view id and perform action what you want example
TextView navUsername = (TextView) headerView.findViewById(R.id.navUsername); navUsername.setText("Your Text Here");
This worked for me:
NavigationView navigationView = findViewById(R.id.nav_view);
View headerView = navigationView.getHeaderView(0);
TextView title = headerView.findViewById(R.id.nav_title);
TextView subTitle = headerView.findViewById(R.id.nav_sub_title);
val navigationView = findViewById<View>(R.id.nav_view_home) as NavigationView
val headerView = navigationView.getHeaderView(0)
val tvUserName = headerView.findViewById<View>(R.id.tvUserName) as TextView
tvUserName.text=(Preference.getInstance("your text")
'Programing' 카테고리의 다른 글
NSUserDefaults에 사용자 지정 개체 저장 (0) | 2020.11.16 |
---|---|
HTML 및 CSS가있는 진행률 표시 줄 (0) | 2020.11.16 |
urllib와 같은 mock / stub 파이썬 모듈은 어떻게 할 수 있습니까? (0) | 2020.11.16 |
UISearchDisplayController가 탐색 모음을 숨기지 못하도록 방지 (0) | 2020.11.16 |
vim regex는 여러 연속 공백을 하나의 공백으로 만 바꿉니다. (0) | 2020.11.16 |