父片段与 viewpager 内的片段通信
Parent Fragment communication with fragment inside viewpager
- 我有一个
MainActivity
with -> FragmentA
其中包含 -> ViewPager
with (Fragment1,Fragment2,Fragment3
)
- 现在
FragmentA
我有一个微调器,任何选择都必须反映 viewpager 的 当前可见片段中的变化。
- 我怎样才能做到这一点?我现在不想遵循
ViewModel
或 EventBus
方法,因为我正在处理非常旧的项目。我想用接口在它们之间进行通信。
不想用ViewModel才奇怪,
我知道这可能不是最佳解决方案,但您可以:
- 你可以在你的片段中创建函数 itIsYourFunctionToUpdate() 并在
FragmentA()
上更新他,用她的对象调用函数,比如 fragmentB.itIsYourFunctionToUpdate()
或
if (ViewPager.getCurrentItem() == 0 && page != null) {
((FragmentClass1)page).itIsYourFunctionToUpdate("new item");
}
- 您也可以像这样更新 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
}
}
并且,根据选择的片段更新FragmentA
的currentPage
值,在每个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()
}
- 我有一个
MainActivity
with ->FragmentA
其中包含 ->ViewPager
with (Fragment1,Fragment2,Fragment3
) - 现在
FragmentA
我有一个微调器,任何选择都必须反映 viewpager 的 当前可见片段中的变化。 - 我怎样才能做到这一点?我现在不想遵循
ViewModel
或EventBus
方法,因为我正在处理非常旧的项目。我想用接口在它们之间进行通信。
不想用ViewModel才奇怪, 我知道这可能不是最佳解决方案,但您可以:
- 你可以在你的片段中创建函数 itIsYourFunctionToUpdate() 并在
FragmentA()
上更新他,用她的对象调用函数,比如fragmentB.itIsYourFunctionToUpdate()
或
if (ViewPager.getCurrentItem() == 0 && page != null) { ((FragmentClass1)page).itIsYourFunctionToUpdate("new item"); }
- 您也可以像这样更新 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
fragment
中实施此 interface
class Fragment1() : Fragment(), OnAddEvent {
override fun onSpinnerValueChanged() {
// implement your method
}
}
并且,根据选择的片段更新FragmentA
的currentPage
值,在每个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()
}