NavigationView get / find 헤더 레이아웃
내 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
.
들어 버전 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"/>
ianhanniballake의 솔루션 제안을 시도했지만 작동하지 않습니다. 그런 다음 나는 문장으로 팽창했다 :
LayoutInflater.from(getContext()).inflate(R.layout.nav_header, mNavigationView);
그 후, nav_heard
레이아웃으로 정의 된 모든보기를 id로 찾을 수 있습니다 .
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 ");
참고 URL : https://stackoverflow.com/questions/33194594/navigationview-get-find-header-layout
'Programming' 카테고리의 다른 글
'선언되지 않은 선택기'경고를 제거하는 방법 (0) | 2020.06.02 |
---|---|
file_get_contents () : 코드 1로 SSL 작업 실패, 암호화 사용 실패 (0) | 2020.06.02 |
XSD와 WSDL의 차이점은 무엇입니까 (0) | 2020.06.01 |
문자열에 숫자 만 포함되어 있는지 확인하는 가장 빠른 방법 (0) | 2020.06.01 |
jQuery를 사용하여 페이지의 스크롤 위치를 감지하는 방법 (0) | 2020.06.01 |