[英]Custom view doesn't update inside a Fragment
我有一個項目,必須在自定義布局中構建視圖。 此布局表示MVP架構中View的概念,它位於Fragment中。 每當事件發生時,演示者都應通過調用View來更新視圖 ,最后將更新View內的TextViews
。 但是似乎在View初始化之后,沒有任何更新。
如果我的演示者調用了包含我的TextView
的View , TextView
任何操作。 如果我嘗試直接從片段更新TextView
,那么它將起作用。 我真的不明白發生了什么,為什么不從包含TextView
的布局中更新它。
MyCustomView:
class MyCustomView(fragment: MyFragment): MyViewInterface, FrameLayout(fragment.context) {
init {
View.inflate(context, R.layout.my_fancy_layout, this)
}
override fun getView(): View {
return this
}
override fun setData(uiModel: UiModel) {
textview_name.text = uiModel.name
}
}
MyFragment:
class MyFragment : Fragment() {
@Inject lateinit var view: MyViewInterface
@Inject lateinit var presenter: MyCustomPresenter
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
... dagger injection ...
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return this.view.getView()
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
presenter.setData(...some ID to fetch data from API...)
//textview_name.text = "blue" //this works instead
}
}
MyPresenter:
class MyPresenter @Inject constructor(
private val repo: MyRepository,
private val view: MyViewInterface
) {
fun setData(productCode: String) {
.. some code ...
view.setData(it) //call to my view
}
}
MyViewInterface:
interface MyViewInterface {
fun getView(): View
fun setData(uiModel: UiModel)
}
因為你只是在創建視圖時膨脹
init {
View.inflate(context, R.layout.my_fancy_layout, this)
}
在更新數據功能中添加無效視圖
override fun setData(uiModel: UiModel) {
textview_name.text = uiModel.name
this.invalidate()
this.requestLayout()
}
我能想到的是,視圖的實例在您的UI和演示者中是不同的。 我不知道您的Dagger代碼,因此我沒有任何修復建議。
您可以將視圖從MyPresenter的構造函數中移開,並在注入后在MyFragment.onCreate中進行設置。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.