setOnClickListener 在片段中不起作用
setOnClickListener not working in fragment
我正在尝试在我的片段中设置一个 onclicklistener
,其中包含一个自定义工具栏,并且在工具栏中我有一个铃铛图标,我试图将其置于 onclicklistener
上但不是'没有工作
这是工具栏custom_toolbar.xml
<androidx.appcompat.widget.Toolbar
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:title="@string/app_name">
<RelativeLayout
android:id="@+id/notification_bell"
..>
<ImageView
..>
<ImageView
..>
<TextView
..>
</RelativeLayout>
</androidx.appcompat.widget.Toolbar>
这是fragment.xml
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".landing.ui.fragment.HomeFragment">
<include android:id="@+id/custom_toolbar"
layout="@layout/custom_toolbar"/>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
然后在Fragment.kt
class HomeFragment : Fragment() {
private fun initbell(notificationCount:Int) {
custom_toolbar.notification_bell.setOnClickListener {
Log.e("Fragment","bell clicked")
}
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
init()
.........
}
private fun init() {
initComponent()
..........
}
private fun initComponent() {
initbell(it)
..........
}
}
}
当铃响时,我想执行一些操作。目前,我应该能够显示日志。
而且我还能够访问它并更改它的可见性,因此它不是启动的问题
备选 :-
Take Relative layout as the header in fragment class like this
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".landing.ui.fragment.HomeFragment">
<RelativeLayout
android:id="@+id/header_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<ImageView
..>
<ImageView
..>
<TextView
..>
</RelativeLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
并在 fragment
class 和 onCreate()
header_bar.setOnClickListener {
Log.e("Fragment","bell clicked")
}
试试这个,
向工具栏添加一个 id
<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:id="@+id/tb_toolbar"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:title="@string/app_name">
<RelativeLayout
android:id="@+id/notification_bell"
android:layout_width="50dp"
android:layout_height="match_parent"
android:background="@color/colorAccent" />
然后里面片段
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
(context as AppCompatActivity).setSupportActionBar(tb_toolbar)
notification_bell.setOnClickListener {
Toast.makeText(context, "Yeaey", Toast.LENGTH_LONG).show()
}
}
在 xml 中向工具栏标签添加一个 id,然后在 kotlin 文件中添加以下行
onViewCreated 方法
(上下文为 AppCompatActivity).setSupportActionBar(your_toolbar_id)
your_toolbar_id.notification_bell.setOnClickListener {
Log.d("TAG", "Your Log message here")
}
如果你想让 RelativeLayout 处理点击,你应该给它添加 android:clickable
属性:
<RelativeLayout
android:id="@+id/notification_bell"
android:clickable="true"
..>
那是因为 RelativeLayout 会让触摸事件从它传递,以便子视图可以处理该事件。
所以我正在调查它,发现有一个小错误,我必须使用 AppBar 布局,这实际上解决了问题,因为 fragment.xml 无法获得 appbar 布局,所以它不是'识别点击。在此之后它就像一个魅力
在fragment.xml
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".landing.ui.fragment.HomeFragment">
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<include
android:id="@+id/custom_toolbar"
layout="@layout/custom_toolbar"/>
</com.google.android.material.appbar.AppBarLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
我正在尝试在我的片段中设置一个 onclicklistener
,其中包含一个自定义工具栏,并且在工具栏中我有一个铃铛图标,我试图将其置于 onclicklistener
上但不是'没有工作
这是工具栏custom_toolbar.xml
<androidx.appcompat.widget.Toolbar
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:title="@string/app_name">
<RelativeLayout
android:id="@+id/notification_bell"
..>
<ImageView
..>
<ImageView
..>
<TextView
..>
</RelativeLayout>
</androidx.appcompat.widget.Toolbar>
这是fragment.xml
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".landing.ui.fragment.HomeFragment">
<include android:id="@+id/custom_toolbar"
layout="@layout/custom_toolbar"/>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
然后在Fragment.kt
class HomeFragment : Fragment() {
private fun initbell(notificationCount:Int) {
custom_toolbar.notification_bell.setOnClickListener {
Log.e("Fragment","bell clicked")
}
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
init()
.........
}
private fun init() {
initComponent()
..........
}
private fun initComponent() {
initbell(it)
..........
}
}
}
当铃响时,我想执行一些操作。目前,我应该能够显示日志。 而且我还能够访问它并更改它的可见性,因此它不是启动的问题
备选 :-
Take Relative layout as the header in fragment class like this
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".landing.ui.fragment.HomeFragment">
<RelativeLayout
android:id="@+id/header_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<ImageView
..>
<ImageView
..>
<TextView
..>
</RelativeLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
并在 fragment
class 和 onCreate()
header_bar.setOnClickListener {
Log.e("Fragment","bell clicked")
}
试试这个, 向工具栏添加一个 id
<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:id="@+id/tb_toolbar"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:title="@string/app_name">
<RelativeLayout
android:id="@+id/notification_bell"
android:layout_width="50dp"
android:layout_height="match_parent"
android:background="@color/colorAccent" />
然后里面片段
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
(context as AppCompatActivity).setSupportActionBar(tb_toolbar)
notification_bell.setOnClickListener {
Toast.makeText(context, "Yeaey", Toast.LENGTH_LONG).show()
}
}
在 xml 中向工具栏标签添加一个 id,然后在 kotlin 文件中添加以下行 onViewCreated 方法
(上下文为 AppCompatActivity).setSupportActionBar(your_toolbar_id)
your_toolbar_id.notification_bell.setOnClickListener {
Log.d("TAG", "Your Log message here")
}
如果你想让 RelativeLayout 处理点击,你应该给它添加 android:clickable
属性:
<RelativeLayout
android:id="@+id/notification_bell"
android:clickable="true"
..>
那是因为 RelativeLayout 会让触摸事件从它传递,以便子视图可以处理该事件。
所以我正在调查它,发现有一个小错误,我必须使用 AppBar 布局,这实际上解决了问题,因为 fragment.xml 无法获得 appbar 布局,所以它不是'识别点击。在此之后它就像一个魅力
在fragment.xml
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".landing.ui.fragment.HomeFragment">
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<include
android:id="@+id/custom_toolbar"
layout="@layout/custom_toolbar"/>
</com.google.android.material.appbar.AppBarLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>