我是一名新手程序员,我的应用程序有问题。
它是一个带有 4 个 fragment 和一个 viewpager 的 Activity 。
我在每个 fragment 中有 1 个按钮,当您单击它时会执行某些操作。
当我单击 fragment 1 中的按钮并向下滚动到 fragment 4 并返回 fragment 1 时。
fragment 1 中的按钮停止工作。
如果您不单击 fragment 1 中的按钮并向下滚动到 fragment 4 并返回 fragment 1。该按钮可以正常工作。
当我单击按钮并滚动到远处的 fragment 并返回后再次单击时,就会出现问题。
主要的:
class MainActivity : AppCompatActivity(), OnFragmentActionsListener {
override fun onCreate(savedInstanceState: Bundle?) {
setTheme(R.style.AppTheme)
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val fragmentAdapter = PageAdapter(this, supportFragmentManager)
viewPager.adapter = fragmentAdapter
val mPager: ViewPager = findViewById(R.id.viewPager)
mPager.setPageTransformer(true, PageAdapter.ZoomOutPageTransformer())
tablayout.setupWithViewPager(viewPager)
}
override fun onClickFragment1btn1() {
//here i do something when click the button like do a
}
浏览器:class PageAdapter (val context: Context, fm: FragmentManager): FragmentStatePagerAdapter(fm) {
override fun getItem(position: Int): Fragment {
return when (position) {
0 -> {FOne()}
1 -> {FTwo()}
2 -> {FThree()}
else -> {return FFour()}
}
}
override fun getCount(): Int {
return 4
}
override fun getPageTitle(position: Int): CharSequence? {
return when (position) {
0 -> "tab1"
1 -> "tab2"
2 -> "tab3"
else -> {
return "tab4"
}
}
}
界面:interface OnFragmentActionsListener {
//Fragment 1:
fun onClickFragment1btn1()
//Fragment 2:
fun onClickFragment1btn2()
//Fragment 3:
fun onClickFragment1btn3()
//Fragment 4:
fun onClickFragment1btn4()
}
分段:class FOne : Fragment() {
private var listener: OnFragmentActionsListener? = null
val TAG = "FragmentOne"
override fun onAttach(context: Context) {
super.onAttach(context)
Log.d(TAG, "onAtach")
if (context is OnFragmentActionsListener) {
listener = context
} else {
throw RuntimeException(context!!.toString() +"must implement OnFragmentInteractionListener")
}
}
override fun onCreate(savedInstanceState: Bundle?){
super.onCreate(savedInstanceState)
Log.d(TAG, "onCreate")
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,savedInstanceState: Bundle?): View?{
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_f_one, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
btn1.setOnClickListener{listener?.onClickFragment1btn1() }
}
override fun onDetach() {
super.onDetach()
listener = null
}
}
最佳答案
最好的方法是:
方法一:
在您的 viewpager 上设置此行:
viewPager.setOffscreenPageLimit(4);
这将在您的内存中保留 4 个 fragment 。
关于android - 覆盖 fragment 中的 setOnClickListener 停止工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63144152/