[英]Hamburger icon changes on Back Arrow icon after closing the previous Activity
[英]Back arrow is not converting to hamburger icon
我將Kotlin
與Android Studio 3.1.4配合使用。 我選擇了NavigationDrawer
模板創建了一個新項目。 我加了兩個片段MainFragment
和SecondFragment
到Mainactivity
。 當activity
開始時,將顯示MainFragment
,然后單擊NavigationDrawer
Camera項來調用SecondFragment
。 當我按下后退按鈕時,它轉到MainFragment,但ActionBar仍顯示后退箭頭而不是漢堡包。 以前,我使用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
}
}
在SecondFragment的onDestroy
上設置此行
(activity as AppCompatActivity).supportActionBar!!.setDisplayHomeAsUpEnabled(false)
您永遠不會將NavigationIcon退回到漢堡包。
也許嘗試:
toolbar.setNavigationIcon(R.drawable.hamburger)
在您的MainFragment中?
因此,漢堡沒有顯示-
val工具欄=活動!!。findViewById(R.id.toolbar)(活動為AppCompatActivity).setSupportActionBar(工具欄)toolbar.setNavigationIcon(R.drawable.abc_ic_ab_back_material)
要同時處理后退按鈕和漢堡包,請在活動中添加以下代碼。
supportFragmentManager.addOnBackStackChangedListener(android.support.v4.app.FragmentManager.OnBackStackChangedListener {
if (supportFragmentManager.getBackStackEntryCount() > 0) {
supportActionBar?.setDisplayHomeAsUpEnabled(true); // show back button
toolbar?.setNavigationOnClickListener(View.OnClickListener { onBackPressed() })
} else {
//show hamburger
supportActionBar?.setDisplayHomeAsUpEnabled(false);
toogle.syncState();
toolbar?.setNavigationOnClickListener(View.OnClickListener {
drawer.openDrawer(GravityCompat.START);
})
setTitle(resources.getString(R.string.app_name))
}
})
並從第二個片段中刪除以下代碼-
(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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.