父片段与 viewpager 内的片段通信

Parent Fragment communication with fragment inside viewpager

不想用ViewModel才奇怪, 我知道这可能不是最佳解决方案,但您可以:

  1. 你可以在你的片段中创建函数 itIsYourFunctionToUpdate() 并在 FragmentA() 上更新他,用她的对象调用函数,比如 fragmentB.itIsYourFunctionToUpdate()
if (ViewPager.getCurrentItem() == 0 && page != null) {
          ((FragmentClass1)page).itIsYourFunctionToUpdate("new item");     
     }
  1. 您也可以像这样更新 viewPager mAdapter.notifyDataSetChanged() 并且必须更新 viewPager 中的所有片段

在您的 FragmentA

中创建一个 interface
interface OnSpinnerValue{
    fun onSpinnerValueChanged()
}

为当前选择的fragment创建一个WeakReference

private var _currentPage: WeakReference<OnSpinnerValue>? = null
private val currentPage
    get() = _currentPage?.get()

fun setCurrentPage(page: OnSpinnerValue) {
    _currentPage = WeakReference(page)
}

现在在 ViewPager

的每个 child fragment 中实施此 interface
class Fragment1() : Fragment(), OnAddEvent {
    override fun onSpinnerValueChanged() {
         // implement your method
    }
}

并且,根据选择的片段更新FragmentAcurrentPage值,在每个child的onResume()中更新fragment

override fun onResume() {
    super.onResume()
    (parentFragment as FragmentA).setCurrentPage(this)
}

现在,从微调器的 onItemSelected 方法中触发 onSpinnerValueChanged

override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
     currentPage?.onSpinnerValueChanged()
}