android - 后退箭头未转换为汉堡图标
问题描述
我正在使用带有Kotlin
. 我创建了一个新项目选择NavigationDrawer
模板。我添加了两个片段MainFragment
和. 显示何时开始,然后我通过单击来自的相机项目进行调用。当我按下后退按钮时,它转到 MainFragment 但 ActionBar 仍然显示后退箭头而不是汉堡包。以前我在一个项目上工作过,一切都很好。SecondFragment
Mainactivity
activity
MainFragment
SecondFragment
NavigationDrawer
android.support.v4.widget.DrawerLayout
以下是我的MainActiviy
代码:
import android.os.Bundle
import android.support.design.widget.NavigationView
import android.support.v4.view.GravityCompat
import android.support.v7.app.ActionBarDrawerToggle
import android.support.v7.app.AppCompatActivity
import android.view.Menu
import android.view.MenuItem
import kotlinx.android.synthetic.main.activity_main.*
import kotlinx.android.synthetic.main.app_bar_main.*
class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelectedListener {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
setSupportActionBar(toolbar)
showMainFragment()
val toggle = ActionBarDrawerToggle(this, drawer_layout, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close)
drawer_layout.addDrawerListener(toggle)
toggle.syncState()
nav_view.setNavigationItemSelectedListener(this)
}
override fun onBackPressed() {
if (drawer_layout.isDrawerOpen(GravityCompat.START)) {
drawer_layout.closeDrawer(GravityCompat.START)
} else if (supportFragmentManager.backStackEntryCount > 0) {
supportFragmentManager.popBackStack()
} else {
super.onBackPressed()
}
}
override fun onCreateOptionsMenu(menu: Menu): Boolean {
// Inflate the menu; this adds items to the action bar if it is present.
menuInflater.inflate(R.menu.main, menu)
return true
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
val itemId = item.itemId
if (itemId == android.R.id.home) {
onBackPressed()
}
when (item.itemId) {
R.id.action_settings -> return true
else -> return super.onOptionsItemSelected(item)
}
}
override fun onNavigationItemSelected(item: MenuItem): Boolean {
// Handle navigation view item clicks here.
when (item.itemId) {
R.id.nav_camera -> {
// Handle the camera action
val fragment = SecondFragment()
val fragmentTransaction = supportFragmentManager.beginTransaction()
fragmentTransaction.replace(R.id.fragment_container, fragment, "OK")
fragmentTransaction.addToBackStack(null)
fragmentTransaction.commit()
}
R.id.nav_gallery -> {
}
R.id.nav_slideshow -> {
}
R.id.nav_manage -> {
}
R.id.nav_share -> {
}
R.id.nav_send -> {
}
}
drawer_layout.closeDrawer(GravityCompat.START)
return true
}
private fun showMainFragment(){
val fragment = MainFragment()
val fragmentTransaction = supportFragmentManager.beginTransaction()
fragmentTransaction.replace(R.id.fragment_container, fragment)
fragmentTransaction.commit()
}
}
MainFragment
代码:
import android.os.Bundle
import android.support.v4.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.support.v7.app.AppCompatActivity
import kotlinx.android.synthetic.main.app_bar_main.*
// TODO: Rename parameter arguments, choose names that match
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
private const val ARG_PARAM1 = "param1"
private const val ARG_PARAM2 = "param2"
/**
* A simple [Fragment] subclass.
*
*/
class MainFragment : Fragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
// Inflate the layout for this fragment
var view : View = inflater.inflate(R.layout.fragment_main, container, false)
return view
}
SecondFragment
代码:
import android.os.Bundle
import android.support.v4.app.Fragment
import android.support.v7.app.AppCompatActivity
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
// TODO: Rename parameter arguments, choose names that match
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
private const val ARG_PARAM1 = "param1"
private const val ARG_PARAM2 = "param2"
class SecondFragment : Fragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
// Inflate the layout for this fragment
val view : View = inflater!!.inflate(R.layout.fragment_surah, container, false)
(activity as AppCompatActivity).supportActionBar!!.setDisplayHomeAsUpEnabled(true)
val toolbar = activity!!.findViewById<android.support.v7.widget.Toolbar>(R.id.toolbar)
(activity as AppCompatActivity).setSupportActionBar(toolbar)
toolbar.setNavigationIcon(R.drawable.abc_ic_ab_back_material)
return view
}
}
解决方案
在onDestroy
SecondFragment 上设置这条线
(activity as AppCompatActivity).supportActionBar!!.setDisplayHomeAsUpEnabled(false)
推荐阅读
- java - java lambda中未使用的局部变量声纳问题
- android - 如何将非挂起的意图操作添加到 chrome 自定义选项卡工具栏菜单?
- sparql - 维基数据导入大师
- c++ - Qt, linux, 添加构建日期和时间定义
- java - 从 Java 调用 Python(Anaconda)脚本(导入库问题)
- sql - 如何在 SQL Server 中反转语句
- javafx - 在 JavaFX TableView 中完全隐藏或禁用水平滚动条
- ckan - CKAN 2.8.2 中的 SSL 问题
- regex - Perl 正则表达式的含义?它是否捕捉到正确的东西,XML 到 TXT
- java - 如何修复 ScriptRunner 中的错误请求 - jira