Я создаю проект, который использует нижнюю навигацию.
Я использую фрагмент для вызова вкладок
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
}
})
Но фрагмент всегда перезагружается
Я устал какой-то метод
- заменить (). AddToBackStack (нуль)
- заменить (). AddToBackStack (тэг)
- добавить, скрыть, показать
addToBackStack () - при использовании этого, когда я нажимал на нижнюю кнопку «Назад» на андроиде по умолчанию, это портит мой макет фрагмента. то же самое с return @ OnNavigationItemSelectedListener true
Я следил за многими форумами, связанными с этой проблемой, но в моем случае ничего не работает.
Мой четвертый фрагмент -
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
}
}
}