从 Fragment 访问工具栏(MaterialToolbar)?
Access Toolbar (MaterialToolbar) from Fragment?
如何使用 activity.actionBar
从 Fragment
访问 Toolbar
(实际上是 MaterialToolbar
)?
main_layout.xml(摘录):
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:liftOnScroll="true">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:layout_collapseMode="pin"
app:popupTheme="@style/AppTheme.PopupOverlay"
android:background="#ffffff">
</com.google.android.material.appbar.MaterialToolbar>
</com.google.android.material.appbar.AppBarLayout>
MainActivity(摘录):
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
[..]
setSupportActionBar(binding.toolbar)
}
MyFragment(摘录):
class MyFragment: Fragment() {
[..]
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val actNull = activity == null
Timber.i("DEF: activity == null: $actNull")
var barNull = activity?.actionBar == null
Timber.i("DEF: activity.actionbar == null: $barNull")
}
}
MyFragment 中调试语句的输出:
DEF: activity == null: false
DEF: activity.actionbar == null: true
因为我在 MainActivity
中使用了 setSupportActionBar(binding.toolbar)
,activity.actionbar
不应该是非空的吗?我在这里做错了什么?
提示:据我所知,我也可以使用 activity.findViewById(R.id.toolbar)
。这个问题实际上是关于为什么 activity.actionBar
不起作用。
您可以使用:
(activity as AppCompatActivity).supportActionBar
稍微解释一下:
activity
returns 处理 android.app.ActionBar
.
的 FragmentActivity
您正在使用 AppCompatActivity
来处理 androidx.appcompat.app.ActionBar
.
他们是不同的。
如何使用 activity.actionBar
从 Fragment
访问 Toolbar
(实际上是 MaterialToolbar
)?
main_layout.xml(摘录):
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:liftOnScroll="true">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:layout_collapseMode="pin"
app:popupTheme="@style/AppTheme.PopupOverlay"
android:background="#ffffff">
</com.google.android.material.appbar.MaterialToolbar>
</com.google.android.material.appbar.AppBarLayout>
MainActivity(摘录):
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
[..]
setSupportActionBar(binding.toolbar)
}
MyFragment(摘录):
class MyFragment: Fragment() {
[..]
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val actNull = activity == null
Timber.i("DEF: activity == null: $actNull")
var barNull = activity?.actionBar == null
Timber.i("DEF: activity.actionbar == null: $barNull")
}
}
MyFragment 中调试语句的输出:
DEF: activity == null: false
DEF: activity.actionbar == null: true
因为我在 MainActivity
中使用了 setSupportActionBar(binding.toolbar)
,activity.actionbar
不应该是非空的吗?我在这里做错了什么?
提示:据我所知,我也可以使用 activity.findViewById(R.id.toolbar)
。这个问题实际上是关于为什么 activity.actionBar
不起作用。
您可以使用:
(activity as AppCompatActivity).supportActionBar
稍微解释一下:
activity
returns 处理 android.app.ActionBar
.
的 FragmentActivity
您正在使用 AppCompatActivity
来处理 androidx.appcompat.app.ActionBar
.
他们是不同的。