java - 添加选项菜单时操作栏后退按钮不起作用
问题描述
我将选项菜单膨胀为片段,之后,操作栏后退按钮不起作用,而系统后退按钮也起作用。请在下面查看我的代码。
这是我的代码:
新闻片段.kt
package com.example.googlelike.news
import android.os.Bundle
import android.view.*
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProviders
import com.example.googlelike.R
import com.example.googlelike.databinding.FragmentNewsBinding
import com.example.googlelike.network.MarsApiFilter
class NewsFragment : Fragment(){
private val newsViewModel: NewsViewModel by lazy {
ViewModelProviders.of(this).get(NewsViewModel::class.java)
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val binding = FragmentNewsBinding.inflate(inflater)
binding.lifecycleOwner = this
binding.recyclerView.adapter = NewsAdapter()
binding.viewModel = newsViewModel
setHasOptionsMenu(true)
return binding.root
}
override fun onCreateOptionsMenu(menu: Menu?, inflater: MenuInflater?) {
super.onCreateOptionsMenu(menu, inflater)
inflater?.inflate(R.menu.option_menu,menu)
}
override fun onOptionsItemSelected(item: MenuItem?): Boolean {
newsViewModel.updateFilterProperty(when(item?.itemId){
R.id.rent_menu -> MarsApiFilter.RENT
R.id.buy_menu -> MarsApiFilter.BUY
else -> MarsApiFilter.SHOW_ALL
})
return true
}
}
HomeFragment.kt(在将选项菜单膨胀到 NewsFragment.kt 后,我无法通过操作栏返回按钮从 NewsFragment 回到 HomeFragment)
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.navigation.fragment.findNavController
import com.example.googlelike.databinding.FragmentHomeBinding
class HomeFragment : Fragment(){
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val binding = FragmentHomeBinding.inflate(inflater)
binding.lifecycleOwner = this
binding.button3.setOnClickListener {
this.findNavController().navigate(HomeFragmentDirections.actionHomeFragmentToNewsFragment())
}
return binding.root
}
}
MainActivity.kt
class MainActivity : AppCompatActivity() {
lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this,R.layout.activity_main)
val navController = this.findNavController(R.id.nav_host_fragment)
NavigationUI.setupActionBarWithNavController(this,navController)
}
override fun onSupportNavigateUp(): Boolean {
val navController = this.findNavController(R.id.nav_host_fragment)
return navController.navigateUp()
}
}
编辑
我的导航图
<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/nav_graph"
app:startDestination="@id/homeFragment">
<fragment
android:id="@+id/homeFragment"
android:name="com.example.googlelike.home.HomeFragment"
android:label="HomeFragment" >
<action
android:id="@+id/action_homeFragment_to_newsFragment"
app:destination="@id/newsFragment" />
</fragment>
<fragment
android:id="@+id/newsFragment"
android:name="com.example.googlelike.news.NewsFragment"
android:label="NewsFragment" >
<action
android:id="@+id/action_newsFragment_to_detailFragment"
app:destination="@id/detailFragment" />
</fragment>
<fragment
android:id="@+id/detailFragment"
android:name="com.example.googlelike.detail.DetailFragment"
android:label="DetailFragment" />
</navigation>
解决方案
推荐阅读
- java - 如何在 Spring Boot 中配置缓存,使其不缓存错误代码 500/401/403 等错误
- python - 如何使用 selenium 和 python 获取表数据
- javascript - 当我们从其他页面单击按钮时如何打开特定选项卡
- java - 无法将 Person 服务注入为自动装配
- c# - 从字符串 C# Unity3D 解析用户的数学运算
- c++ - 构造后切换 std::priority_queue 比较器
- json - Many to many relationship with SQLAlchemy fails with 'Could not determine join condition between parent/child tables'
- ansible - 我在执行时将 ansible-vault 加密密码变量作为参数传递到 powershell 脚本时遇到问题
- c# - C#中错误的枚举值
- c - 为什么我在串行终端仿真器上收到额外的字符?& 避免他们?