【发布时间】:2018-05-02 19:06:58
【问题描述】:
我正在创建一个使用底部导航的项目。 我正在使用片段进行标签调用
val transaction = supportFragmentManager.beginTransaction()
transaction.add(R.id.frame_layout, Fragment1.newInstance(),Fragment1.newInstance().TAG)
transaction.addToBackStack(null).commit()
bottomNavigationView.setOnNavigationItemSelectedListener(object : BottomNavigationView.OnNavigationItemSelectedListener {
override fun onNavigationItemSelected(item: MenuItem): Boolean {
if(item.itemId == lastSelectedItemId){
return true
}
var menuTag:String ?= null
var selectedFragment: Fragment? = null
lastSelectedItemId = item.itemId
when (item.itemId) {
R.id.tab1 -> {
selectedFragment = Fragment1.newInstance()
menuTag = selectedFragment.TAG
}
R.id.tab2 -> {
selectedFragment = Fragment2.newInstance()
menuTag = selectedFragment.TAG
}
R.id.tab3 -> {
selectedFragment = Fragment3.newInstance()
menuTag = selectedFragment.TAG
}
R.id.tab4 ->{
selectedFragment = Fragment4.newInstance()
menuTag = selectedFragment.TAG
}
}
val transaction = supportFragmentManager.beginTransaction()
transaction.replace(R.id.frame_layout, selectedFragment,menuTag)
transaction.addToBackStack(menuTag).commit()
return true
}
})
但是 Fragment 总是重新加载 我厌倦了一些方法
- replace().addToBackStack(null)
- replace().addToBackStack(tag)
- 添加、隐藏、显示
addToBackStack() - 使用这个,当我点击 android 默认底部后退按钮时,它弄乱了我的片段布局。与 return@OnNavigationItemSelectedListener 相同
我关注了许多与此问题相关的论坛,但就我而言,没有任何效果。
我的第四个片段是
class Fragment4 : Fragment() {
var listOfMoreMenus = ArrayList<MoreLinksObject>()
var adapter: MoreLinksAdapter?=null
public var TAG: String = "more"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
val moreView = inflater.inflate(R.layout.fragment_more, container, false)
val listView = moreView.findViewById(R.id.moreLinks) as ListView
listOfMoreMenus.add(MoreLinksObject("test1","link1"))
listOfMoreMenus.add(MoreLinksObject("test2","link2"))
listOfMoreMenus.add(MoreLinksObject("test3","link3"))
listView.setNestedScrollingEnabled(true)
adapter = MoreLinksAdapter(getActivity()!!,listOfMoreMenus)
listView.adapter = adapter
return moreView
}
companion object {
fun newInstance(): Fragment4 {
return Fragment4()
}
}
inner class MoreLinksAdapter: BaseAdapter {
var listOfMoreMenus= ArrayList<MoreLinksObject>()
var context: Context?=null
constructor(context:Context, listOfMoreMenus: ArrayList<MoreLinksObject>):super(){
this.listOfMoreMenus=listOfMoreMenus
this.context=context
}
override fun getItem(position: Int): Any {
return listOfMoreMenus[position]
}
override fun getItemId(position: Int): Long {
return position.toLong()
}
override fun getCount(): Int {
return listOfMoreMenus.size
}
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
val MoreLinkObj = listOfMoreMenus[position]
var inflator = context!!.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
var myView = inflator.inflate(R.layout.more_menu, null)
val moreMenuName = myView.findViewById(R.id.moreMenuName) as TextView
moreMenuName.text = MoreLinkObj.name!!
return myView
}
}
}
【问题讨论】:
-
stackoverflow.com/questions/45130713/… 这里已经有问题和解决方案。
标签: android android-fragments kotlin bottomnavigationview