问题描述
我有一个带有 ViewPager
的片段。我正在尝试保存选择了哪个选项卡的信息,以便在旋转屏幕时可以正确检索。这是我的代码:
class MainFragment : Fragment() {
var currentPage: Int = 0
override fun onCreateView(
inflater: LayoutInflater,container: ViewGroup?,savedInstanceState: Bundle?
): View? {
return inflater.inflate(R.layout.fragment_main,container,false)
}
override fun onViewCreated(view: View,savedInstanceState: Bundle?) {
super.onViewCreated(view,savedInstanceState)
Log.e("DEBUGGING","onViewCreated: savedInstanceState = $savedInstanceState")
savedInstanceState?.getInt("currentPage")?.let{
Log.e("DEBUGGING","onViewCreated: it = $it")
currentPage = it
}
setViewPagerWithTabs()
}
private fun setViewPagerWithTabs() {
val arraylistofScreens = arraylistof<TabScreen>()
arraylistofScreens.add(
TabScreen(
TodayFragment(),getString(R.string.today),R.drawable.ic_baseline_wb_sunny_24
)
)
arraylistofScreens.add(
TabScreen(
ForecastFragment(),getString(R.string.forecast),R.drawable.ic_baseline_event_24
)
)
view_pager.adapter = SectionsPagerAdapter(arraylistofScreens,childFragmentManager)
tabs.setupWithViewPager(view_pager)
Log.e("DEBUGGING","setViewPagerWithTabs: currentPage = $currentPage")
view_pager.currentItem = currentPage
view_pager.addOnPagechangelistener(object : ViewPager.OnPagechangelistener {
override fun onPageSelected(position: Int) {
Log.e("DEBUGGING","onPageSelected: position = $position")
currentPage = position
}
override fun onPageScrolled(
position: Int,positionOffset: Float,positionOffsetPixels: Int
) {
}
override fun onPageScrollStateChanged(state: Int) {}
})
// setup icons
var index = 0
arraylistofScreens.forEach {
tabs.getTabAt(index)?.setIcon(it.icon)
index++
}
}
override fun onSaveInstanceState(outState: Bundle) {
outState.putInt("currentPage",currentPage)
Log.e("DEBUGGING","onSaveInstanceState: currentPage = $currentPage")
super.onSaveInstanceState(outState)
}
}
这些是旋转时的日志结果:
E/DEBUGGING: onPageSelected: position = 1
E/DEBUGGING: onSaveInstanceState: currentPage = 1
E/DEBUGGING: onViewCreated: savedInstanceState = null
E/DEBUGGING: setViewPagerWithTabs: currentPage = 0
我不知道为什么没有保存状态...我也尝试使用 onViewStateRestored()
但结果完全一样。
MainFragment 在 MainActivity 中是这样调用的:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
if (!mainviewmodel.hasCurrentData() && !mainviewmodel.internetAvailable()) {
supportFragmentManager.beginTransaction()
.replace(R.id.container,NoDataFragment())
.commitNow()
} else {
supportFragmentManager.beginTransaction()
.replace(R.id.container,MainFragment())
.commitNow()
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)