![](/img/trans.png)
[英]Communication between Fragment Inside viewpager and fragment that have the viewpager
[英]Fragment communication with fragment inside viewpager
MainActivity
with -> FragmentA
其中包含 -> ViewPager
with ( Fragment1,Fragment2,Fragment3
)FragmentA
我有一個微調器,任何選擇都必須反映viewpager當前可見片段內的更改。ViewModel
或EventBus
方法,因為我正在處理非常古老的項目。 我想使用接口在它們之間進行通信。在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
值,並在每個子fragment
onResume()
中更新它
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()
}
如果您不想使用 ViewModel ,這很奇怪,我知道這可能不是最佳解決方案,但您可以:
FragmentA()
上更新他,使用她的對象調用函數,如fragmentB.itIsYourFunctionToUpdate()
或if (ViewPager.getCurrentItem() == 0 && page != null) { ((FragmentClass1)page).itIsYourFunctionToUpdate("new item"); }
mAdapter.notifyDataSetChanged()
並且必須更新 viewPager 中的所有片段
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.