问题描述
如果我之前有一个活动(仪表板),其中使用了如下布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<FrameLayout
android:id="@+id/dashboardContentFrame"
android:layout_width="match_parent"
android:layout_height="wrap_content" /> .........
我为这个 Frame Layout
使用了一个名为 DashboardFragment
的 Fragment 类,它扩展了一个基类 ACBaseFragment
。
DashBoardFragment.class:
class DashboardFragment : ACBaseFragment<DashboardContract.Presenter>(),DashboardContract.View,View.OnClickListener {
........
....
..
}
ACBaseFragment.class:
public abstract class ACBaseFragment<T extends BasePresenterContract> extends Fragment implements BaseView<T> {
protected T mPresenter;
@Override
public void setPresenter(@NonNull T presenter) {
mPresenter = presenter;
}
public boolean isActive() {
return isAdded();
}
@Override
public void onResume() {
super.onResume();
mPresenter.subscribe();
}
@Override
public void onPause() {
super.onPause();
mPresenter.unsubscribe();
}
}
所以在我的 DashboardActivity 中,我设置了这样的演示者:
var dashboardFragment = supportFragmentManager.findFragmentById(R.id.dashboardContentFrame) as DashboardFragment?
if (dashboardFragment == null) {
dashboardFragment = DashboardFragment.newInstance()
}
if (!dashboardFragment.isActive) {
addFragmentToActivity(supportFragmentManager,dashboardFragment,R.id.dashboardContentFrame)
}
// Create the presenter
DashboardPresenter(dashboardFragment)
DashBoardPresenter.class:
class DashboardPresenter(private val mDashboardView: DashboardContract.View) : BasePresenter(),DashboardContract.Presenter {
override fun subscribe() {
mDashboardView.bindDrawableResources()
}
init {
mDashboardView.setPresenter(this)
}
}
显然,DashboardPresenter 需要一个 DashboardContract.View
参数,我如上所示传递了该参数。
但是现在,当我使用导航组件时,我不知道如何为此仪表板片段设置演示者。我尝试使用:
var dashboardFragment = supportFragmentManager.findFragmentById(R.id.dashboard_nav_host_fragment) as DashboardFragment?
if (dashboardFragment == null) {
dashboardFragment = DashboardFragment.newInstance()
}
if (!dashboardFragment.isActive) {
addFragmentToActivity(supportFragmentManager,R.id.dashboard_nav_host_fragment)
}
// Create the presenter
DashboardPresenter(dashboardFragment)
但它抛出:
ClassCastException: androidx.navigation.fragment.NavHostFragment cannot be cast to org.openmrs.mobile.activities.dashboard.DashboardFragment
总结:我有一个带有合约的 Fragment,我想为这个特定的 Fragment 设置一个 Presenter,那么如何在导航组件中获取该特定 Fragment 的实例?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)