【发布时间】:2018-05-27 11:52:23
【问题描述】:
我创建了一个有4个fragment的底部导航项目,并将setHasOptionsMenu(true)放在qponFragment的onCreate()中,以便在切换Fragments后保持qponFragment的相同内容。但是,它不起作用,qponFragment 从其他 Fragment 切换回来后仍然刷新。请帮助解决它并找出我的代码有什么问题。
这里是 MainActivity.kt 的代码
class MainActivity : AppCompatActivity() {
private var mFirebaseAnalytics: FirebaseAnalytics? = null
private val mOnNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener { item ->
when (item.itemId) {
R.id.navigation_qpon -> {
//message.setText(R.string.title_qpon)
actionBarIcon(R.drawable.ic_title_black)
createQponFragment()
return@OnNavigationItemSelectedListener true
}
R.id.navigation_me-> {
//message.setText(R.string.title_me)
actionBarIcon(R.drawable.logged)
createMeFragment()
return@OnNavigationItemSelectedListener true
}
R.id.navigation_tool -> {
//message.setText(R.string.title_tool)
actionBarIcon(R.drawable.logged)
createToolFragment()
return@OnNavigationItemSelectedListener true
}
R.id.navigation_tutorial -> {
//message.setText(R.string.title_tutorial)
actionBarIcon(R.drawable.tutorial)
createTutorialFragment()
return@OnNavigationItemSelectedListener true
}
}
false
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// Obtain the FirebaseAnalytics instance.
mFirebaseAnalytics = FirebaseAnalytics.getInstance(this)
actionBarIcon(R.drawable.ic_title_black)
createQponFragment()
navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener)
}
fun actionBarIcon(imageName:Int) {
setSupportActionBar(findViewById(R.id.my_toolbar))
my_toolbar.setLogo(imageName)
if (imageName == R.drawable.ic_title_black) {
my_toolbar.setTitle("")
}
if (imageName == R.drawable.logged) {
my_toolbar.setTitle("login name")
}
if (imageName == R.drawable.tutorial) {
my_toolbar.setTitle("Tutorial")
}
}
val manager = supportFragmentManager
fun createQponFragment() {
val transaction = manager.beginTransaction()
val fragment = qponFragment()
transaction.replace(R.id.fragmentholder,fragment)
transaction.addToBackStack(null)
transaction.commit()
}
fun createMeFragment() {
val transaction = manager.beginTransaction()
val fragment = meFragment()
transaction.replace(R.id.fragmentholder,fragment)
transaction.addToBackStack(null)
transaction.commit()
}
fun createToolFragment() {
val transaction = manager.beginTransaction()
val fragment = toolFragment()
transaction.replace(R.id.fragmentholder,fragment)
transaction.addToBackStack(null)
transaction.commit()
}
fun createTutorialFragment() {
val transaction = manager.beginTransaction()
val fragment = tutorialFragment()
transaction.replace(R.id.fragmentholder,fragment)
transaction.addToBackStack(null)
transaction.commit()
}
}
这里是 qponFragment.kt 的代码
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setRetainInstance(true)
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
setHasOptionsMenu(true)
return inflater.inflate(R.layout.fragment_qpon, container, false)
}
【问题讨论】:
-
为什么是它是一个保留片段?
-
我在 qponFragment 中还有 2 个 spinner 和一个 recyclerview ,但是我没有把所有的代码都放到这个问题上。我只希望当用户从其他片段切换回来时 Qpon 片段不刷新。你现在明白我的问题了吗?
-
为什么不使用ViewModel?
-
不知道怎么用,我是新手。我按照教程向我展示了如何使用 android studio 的默认底部导航。
标签: android kotlin fragment refresh