Los*_*yos 5 android interface android-fragments android-viewpager kotlin
每次用户在底部菜单导航中单击片段时,我都会尝试刷新片段中的数据。我已经编写了一个接口,每次用户选择片段时都会调用该接口。问题是片段内的方法无法访问片段的视图(我猜):
主菜单
viewPager = findViewById(R.id.frame_container)
viewPager!!.offscreenPageLimit = 5
viewPager!!.orientation = ViewPager2.ORIENTATION_HORIZONTAL
viewPager!!.adapter = pageAdapter
viewPager!!.currentItem = 0
viewPager!!.isUserInputEnabled = false
viewPager!!.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
override fun onPageSelected(position: Int) {
super.onPageSelected(position)
if(position == 2) {
val mFragment = ListFragment()
mFragment.ready(this@MainMenu)
}
}
})
Run Code Online (Sandbox Code Playgroud)
界面“就绪”:
interface ReadyInterface {
fun ready(activity: FragmentActivity?)
}
Run Code Online (Sandbox Code Playgroud)
和列表片段:
class ListFragment: Fragment(), ReadyInterface {
var mView : View? = null
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
val view = inflater.inflate(R.layout.fragment_list, container, false)
this.mView = view
val user = FirebaseAuth.getInstance().currentUser
return if (user != null) {
view
} else {
val unregisteredView = inflater.inflate(R.layout.fragment_unregistred, container, false)
val registerNow = unregisteredView.findViewById<TextView>(R.id.textview_registernow)
unregisteredView
}
override fun ready(activity: FragmentActivity?) {
testText = mView!!.findViewById(R.id.test_text)
testText.text = "Test Text here"
Toast.makeText(activity!!.applicationContext,"Test",Toast.LENGTH_LONG).show()
}
Run Code Online (Sandbox Code Playgroud)
此代码在“testText.text = ....”行上崩溃并出现“kotlin.KotlinNullPointerException”
所以我想由于片段的生命周期,有趣的准备人员无法访问我的片段的视图,对吗?我该如何解决这个问题?
小智 0
这里不需要实现接口。您可以直接创建 的ready()成员函数并从in 中ListFragment调用它。目前,由于视图尚未初始化,接口方法在引发空指针异常之前被调用。onPageSelected(position: Int)MainMenuActivityonCreateView()
| 归档时间: |
|
| 查看次数: |
6093 次 |
| 最近记录: |