为什么我不能将视图绑定放在 onClick 侦听器中?
why i can't put view binding inside onClick listener?
我已经定义了这个:
class ProfileFragment : Fragment(), View.OnClickListener {}
和点击:
override fun onClick(v: View?) {
when (v!!.id) {
binding.tvNavSetting -> {
avoidDoubleClicks(binding.tvNavSetting)
val intent = Intent(requireContext(), SettingsActivity::class.java)
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK)
startActivity(intent)
}
}
}
这是我的抽屉和内部配置文件 Fragment.xml :
<com.google.android.material.navigation.NavigationView
app:elevation="10dp"
android:id="@+id/nav_view"
android:paddingBottom="100dp"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="end"
android:background="@color/white"
android:fitsSystemWindows="false">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<androidx.appcompat.widget.SearchView
android:layout_width="match_parent"
android:layout_height="40dp"
android:id="@+id/seach_view"
android:background="@drawable/bg_search"
android:layout_marginHorizontal="10dp"
android:layout_marginVertical="10dp"/>
// this is what i try to call:////
<TextView
android:id="@+id/tv_nav_setting"
android:text="awdadw"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@color/black" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginStart="20dp"
android:layout_marginEnd="40dp"
android:background="@drawable/drawer_bg" />
</LinearLayout>
<Button
android:id="@+id/btn_keluar_profile"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Keluar"
android:layout_margin="10dp"
android:textColor="@color/white"
android:background="@drawable/bg_btn_login"
android:layout_gravity="bottom"/>
</com.google.android.material.navigation.NavigationView>
我在 Fragment 中的抽屉导航中有文本视图。我想在那个抽屉导航中单击手柄,但文本视图无法通过 viewBinding 调用。请看下面的错误图片..
when(v!!.id)
表示您想使用具有特定 ID 的视图(像旧的 Java switch case
或 if(view.id == id)
一样工作,所以 binding.tvNavSetting -> ...
应该是 binding.tvNavSetting.id -> ...
。当前您正在将视图 ID 与整个视图对象本身进行比较
抱歉,我忘了添加:
override fun onClick(v: View?) {
when (v!!.id) {
R.id.tv_nav_setting -> { <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
avoidDoubleClicks(binding.tvNavSetting)
val intent = Intent(requireContext(), SettingsActivity::class.java)
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK)
startActivity(intent)
}
}
}
/*adding this line solve the problem*/
private fun setDrawer() {
binding.drawerLayout.setScrimColor(Color.TRANSPARENT)
binding.tvNavSetting.setOnClickListener(this) <<<-------
}
我已经定义了这个:
class ProfileFragment : Fragment(), View.OnClickListener {}
和点击:
override fun onClick(v: View?) {
when (v!!.id) {
binding.tvNavSetting -> {
avoidDoubleClicks(binding.tvNavSetting)
val intent = Intent(requireContext(), SettingsActivity::class.java)
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK)
startActivity(intent)
}
}
}
这是我的抽屉和内部配置文件 Fragment.xml :
<com.google.android.material.navigation.NavigationView
app:elevation="10dp"
android:id="@+id/nav_view"
android:paddingBottom="100dp"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="end"
android:background="@color/white"
android:fitsSystemWindows="false">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<androidx.appcompat.widget.SearchView
android:layout_width="match_parent"
android:layout_height="40dp"
android:id="@+id/seach_view"
android:background="@drawable/bg_search"
android:layout_marginHorizontal="10dp"
android:layout_marginVertical="10dp"/>
// this is what i try to call:////
<TextView
android:id="@+id/tv_nav_setting"
android:text="awdadw"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@color/black" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginStart="20dp"
android:layout_marginEnd="40dp"
android:background="@drawable/drawer_bg" />
</LinearLayout>
<Button
android:id="@+id/btn_keluar_profile"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Keluar"
android:layout_margin="10dp"
android:textColor="@color/white"
android:background="@drawable/bg_btn_login"
android:layout_gravity="bottom"/>
</com.google.android.material.navigation.NavigationView>
我在 Fragment 中的抽屉导航中有文本视图。我想在那个抽屉导航中单击手柄,但文本视图无法通过 viewBinding 调用。请看下面的错误图片..
when(v!!.id)
表示您想使用具有特定 ID 的视图(像旧的 Java switch case
或 if(view.id == id)
一样工作,所以 binding.tvNavSetting -> ...
应该是 binding.tvNavSetting.id -> ...
。当前您正在将视图 ID 与整个视图对象本身进行比较
抱歉,我忘了添加:
override fun onClick(v: View?) {
when (v!!.id) {
R.id.tv_nav_setting -> { <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
avoidDoubleClicks(binding.tvNavSetting)
val intent = Intent(requireContext(), SettingsActivity::class.java)
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK)
startActivity(intent)
}
}
}
/*adding this line solve the problem*/
private fun setDrawer() {
binding.drawerLayout.setScrimColor(Color.TRANSPARENT)
binding.tvNavSetting.setOnClickListener(this) <<<-------
}