如何在导航组件中为 Fragment正在实现合约设置 Presenter

问题描述

如果我之前有一个活动(仪表板),其中使用了如下布局:

<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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...