- 我有一個
MainActivitywith ->FragmentA其中包含 ->ViewPagerwith (Fragment1,Fragment2,Fragment3) - 現在
FragmentA我有一個微調器,任何選擇都必須反映viewpager當前可見片段內的變化。 - 我怎樣才能做到這一點?我現在不想跟隨
ViewModel或EventBus接近,因為我正在處理非常古老的專案。我想使用介面在它們之間進行通信。
uj5u.com熱心網友回復:
創建一個interface內部你的FragmentA
interface OnSpinnerValue{
fun onSpinnerValueChanged()
}
WeakReference為當前選定的創建一個fragment
private var _currentPage: WeakReference<OnSpinnerValue>? = null
private val currentPage
get() = _currentPage?.get()
fun setCurrentPage(page: OnSpinnerValue) {
_currentPage = WeakReference(page)
}
現在interface在每個孩子fragment中實施這個ViewPager
class Fragment1() : Fragment(), OnAddEvent {
override fun onSpinnerValueChanged() {
// implement your method
}
}
并且,根據選擇的片段更新 的currentPage值FragmentA,并將其更新onResume()到每個孩子的fragment
override fun onResume() {
super.onResume()
(parentFragment as FragmentA).setCurrentPage(this)
}
現在,onSpinnerValueChanged從您的微調器onItemSelected方法觸發
override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
currentPage?.onSpinnerValueChanged()
}
uj5u.com熱心網友回復:
如果您不想使用 ViewModel ,這很奇怪,我知道這可能不是最佳解決方案,但您可以:
- 您可以在片段中創建函式 itIsYourFunctionToUpdate() 并更新他
FragmentA(),使用她的物件呼叫函式,例如fragmentB.itIsYourFunctionToUpdate()或
if (ViewPager.getCurrentItem() == 0 && page != null) { ((FragmentClass1)page).itIsYourFunctionToUpdate("new item"); }
- 您也可以像這樣更新 viewPager
mAdapter.notifyDataSetChanged()并且必須更新 viewPager 中的 所有片段
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/339503.html
標籤:安卓 android-fragments android-viewpager
