Android: OnClick для заголовка ящика навигации не работает
В моем приложении есть ящик для навигации, который содержит заголовок и некоторые элементы списка. Заголовок имеет текстовое представление, которое я хочу сделать кликабельным, но я не могу это сделать.
Чтобы получить идентификатор этого текстового представления, я использовал следующий код, так как он находится в другом файле макета по сравнению с таковым в setContentView в onCreate.
final LayoutInflater factory = getLayoutInflater();
final View textEntryView = factory.inflate(R.layout.header, null);
TextView home = (TextView) textEntryView.findViewById(R.id.home);
home.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(curr_context, "SHOW", Toast.LENGTH_LONG).show();
}
});
header.xml содержит заголовок навигационного ящика. У него есть предмет с именем home. Мне нужно сделать его интерактивным. Вышеприведенный код находится в методе onCreate.
Ответы
Ответ 1
Для меня другие ответы не работали.
Я пробовал приведенный ниже код.
Я знаю это слишком поздно. Надеюсь, это поможет некоторым.
Что я сделал для доступа к заголовку заголовка.
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
View headerview = navigationView.getHeaderView(0);
TextView profilename = (TextView) headerview.findViewById(R.id.prof_username);
profilename.setText("your name")
для просмотра представлений заголовка, здесь я использовал linearlayout headerview
LinearLayout header = (LinearLayout) headerview.findViewById(R.id.header);
header.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(HomeActivity.this, "clicked", Toast.LENGTH_SHORT).show();
drawer.closeDrawer(GravityCompat.START);
}
});
или
headerview.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Your code here
}
});
Ответ 2
Не забудьте определить android:clickable="true"
в вашем текстовом XML файле.
Ответ 3
Я знаю, что это поздно для тех, кто сталкивается с той же проблемой.
поместите макет заголовка в навигационное представление, подобное этому
это в файле activity_main.xml
<android.support.design.widget.NavigationView
android:id="@+id/navigationView"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:layout_marginTop="-24dp"
app:itemTextColor="@color/black"
app:headerLayout="@layout/layout_header_profile"
app:menu="@menu/nav_menu"/>
создайте макет, назовите его layout_header_profile.xml и поместите заливку, которую хотите просмотреть.
layout_header_profile.xml
<?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="178dp"
android:orientation="vertical"
android:weightSum="1"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="56dp"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:orientation="vertical">
<TextView
android:id="@+id/id_user_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:text="Irfan"
android:textSize="14sp"
android:textStyle="bold"
/>
<TextView
android:id="@+id/id_user_email"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:layout_marginTop="5dp"
android:text="[email protected]"
android:textSize="14sp"
android:textStyle="normal"
/>
</LinearLayout>
<ImageView
android:id="@+id/id_profile_image"
android:layout_width="70dp"
android:layout_height="70dp"
android:layout_marginLeft="16dp"
android:layout_marginTop="38dp"
android:src="@mipmap/ic_profile_pic"
/>
</RelativeLayout>
то этот файл макета заголовка будет только в вашем файле activity_main.xml
поэтому в вашем MainActivity.java вы можете объявить его, как вы делаете виды из Activity_main.xml, и выполнять на нем действия, не требуя специального кода.
сделайте это в своем onCreate()
TextView tvUserName = (TextView) findViewById(R.id.id_user_name);
tvUserName.setText("My Name");
tvUserName.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getBaseContext(),"clicking textview",Toast.LENGTH_LONG).show();
}
});
Надеюсь, что это работает. Счастливое кодирование.
Ответ 4
просто добавьте это в свой макет Xml файла заголовка
android:focusable="true"
android:focusableInTouchMode="true"
android:clickable="true"
Ответ 5
Первый просмотр заголовка выборки
View headerView = navigationView.getHeaderView(0);
И затем используйте onClick Listener
headerView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// code
}
});