탐색보기헤더 레이아웃 가져오기/찾기
내 NavigationView에는 활성 버튼이 있는 ID가 'viewId'인 헤더 레이아웃이 있습니다.이러한 버튼을 설정하려면 다음 작업을 수행합니다.onPostCreate
:
final View panel = findViewById(R.id.viewId);
panel.setOnClickListener(new View.OnClickListener() {
... setup goes here ...
});
새로운 버전의 안드로이드 지원 라이브러리(23.1.0)에서는 보기를 찾을 수 없으며 null을 반환합니다.이전 버전에서는 잘 작동했습니다.버그인가요, 아니면 제가 이 기능을 잘못 사용하고 있나요?그렇다면 헤더 레이아웃에 액세스하여 동작을 추가하는 방법은 무엇입니까?
버전 23.1.0 스위치NavigationView
를 사용하기 위해RecyclerView
(이전보다)ListView
헤더가 이러한 요소 중 하나로 추가됩니다.즉, 즉시 전화를 사용할 수 없습니다.findViewById()
레이아웃 패스는 연결되기 전에 필요합니다.NavigationView
.
Support Library 버전 23.1.1의 경우 다음을 사용하여 헤더 뷰에 대한 참조를 얻을 수 있습니다.getHeaderView()
:
View headerLayout = navigationView.getHeaderView(0); // 0-index header
이렇게 하면 XML 및 코드를 통해 추가된 헤더에서 작업할 수 있습니다.
관련 버그에 따라 23.1.0을 여전히 사용하고 있다면 코드에서 헤더를 부풀려 사용할 수 있습니다.findViewById()
그것에 대해:
View headerLayout =
navigationView.inflateHeaderView(R.layout.navigation_header);
panel = headerLayout.findViewById(R.id.viewId);
// panel won't be null
23.1.1로 이동할 때까지.
이제 설계 지원 라이브러리의 23.1.1 릴리스를 사용하여
NavigationView navigationView = (NavigationView) findViewById(R.id.your_nav_view_id);
View header = navigationView.getHeaderView(0)
TextView text = (TextView) header.findViewById(R.id.textView);
이렇게 사용해서 했습니다.ButterKnife
저한테는 효과가 있어요
protected static class HeaderViewHolder {
@BindView(R.id.button)
Button button;
HeaderViewHolder(View view) {
ButterKnife.bind(this, view);
}
}
그런 다음 이 보기 홀더를 다음과 같이 사용합니다.
View header = navigationView.getHeaderView(0);
headerViewHolder = new HeaderViewHolder(header);
나에게 그것은 23.1.0과 같은 상황이었고, 업데이트 후 null 포인터 예외가 되었습니다.이 경우에는NavigatorView
모양:
<android.support.design.widget.NavigationView
android:id="@+id/navigation_view"
android:layout_height="match_parent"
android:layout_width="wrap_content"
android:layout_gravity="start"
android:fitsSystemWindows="true"
app:headerLayout="@layout/nav_header"
app:menu="@menu/menu_nav"/>
이안 하니발레이크의 솔루션 제안을 시도해 보았지만 효과가 없습니다.그리고 나서 저는 다음과 같은 문장으로 부풀렸습니다.
LayoutInflater.from(getContext()).inflate(R.layout.nav_header, mNavigationView);
그런 다음 id에서 정의된 모든 뷰를 찾을 수 있습니다.nav_heard
배치도
NavigationView navigationView = findViewById(R.id.your_nav_view);
View header = navigationView.getHeaderView(0);
TextView textUsername = header.findViewById(R.id.textView);
textUsername.setText("you text here ")
NavigationView navigationView = findViewById(R.id.your_nav_view);
View header = navigationView.getHeaderView(0);
TextView textUsername = header.findViewById(R.id.textView);
textUsername.setText("you text here ");
코틀린에서 @프랑수아 더무 코드는 다음과 같습니다.
val navigationView : NavigationView = findViewById(R.id.your_nav_view_id);
val header = navigationView.getHeaderView(0)
val textView = header.findViewById<TextView>(R.id.textView)
코틀린 버전.
val navView: NavigationView = findViewById(R.id.nav_view)
// set User Name
val headerView: View = navView.getHeaderView(0)
headerView.txtUserName.text = "User Name Goes here"
Java에서 작동합니다.
navigationView = findViewById(R.id.nav_view);
View viewHeader = navigationView.getHeaderView(0);
((TextView)viewHeader.findViewById(R.id.tv_name)).setText(preferences.getString(MyConstant.NAME,"n/a"));
서랍에서 사용자 이름을 변경하는 방법은 다음과 같습니다.
NavigationView mNavigationView = findViewById(R.id.nav_view);
View mHeaderView = mNavigationView.getHeaderView(0);
TextView usernameTextview = mHeaderView.findViewById(R.id.drawer_email_textField);
Bundle b = getIntent().getExtras();
String username = b.getString("email");
usernameTextview.setText(username);
그것은 나에게 효과가 있습니다.
언급URL : https://stackoverflow.com/questions/33194594/navigationview-get-find-header-layout
'source' 카테고리의 다른 글
리소스에서 그리기 가능한 항목을 만드는 방법 (0) | 2023.08.23 |
---|---|
각도 @NGRX에서 이 세 개의 점의 의미는 무엇입니까? (0) | 2023.08.23 |
링크를 통해 개인 깃허브 저장소를 공유할 수 있습니까? (0) | 2023.08.23 |
ESLint 예기치 않은 isNaN 사용 (0) | 2023.08.23 |
Spring XML 컨텍스트에서 조건부 리소스 가져오기를 수행하는 방법은 무엇입니까? (0) | 2023.08.23 |