android - 在不实例化实际 fragment 的情况下调用 fragment 方法

标签 android android-fragments

我不是 android 的高级用户,我不知道这是否是最佳方式,但我的结构有问题。在做 webapps 和 desktop apps 的时候,我已经习惯了将逻辑和展示彼此分开,我尝试在 android 中做到这一点。

到目前为止,我在每个 fragment 中都有每个“ View ”的逻辑,所以我想为每个 Activity 中的每个按钮都有一个 onClick 函数(这是谷歌推荐的),只对每个 fragment 进行一个方法调用,并从那里处理逻辑。问题是当我使用抽屉导航和推荐的接口(interface)实现时,我无法实现这些功能,因为我没有实现类,而是朝着 fragment 接口(interface)努力。

到目前为止,我有这个用于处理菜单点击和更改 fragment :

private void displayFragment(int menuId) {
    Fragment fragment = null;

    switch (menuId) {
        case R.id.nav_search:
            fragment = new SearchFragment();
            break;
        case R.id.nav_create_ticket:
            break;
        case R.id.nav_logout:
            LogoutDialogFragment logoutDialogFragment = new LogoutDialogFragment();
            logoutDialogFragment.show(getSupportFragmentManager(), "Logud");
            break;
    }

    //replacing the fragment
    if (fragment != null) {
        FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
        ft.replace(R.id.content_fragment_container, fragment);
        ft.commit();
    }

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    drawer.closeDrawer(GravityCompat.START);
}

所以我当然只能调用从接口(interface)实现的方法,而不是我的“searchfragment”类的公共(public)函数。我不认为这是正确的方法,但我想要实现的是像这样:

public void searchBtnClicked(View view) {
    fragment.searchForLicensePlate();
}

有没有更好的方法?我认为我不应该在 searchBtnClicked 方法中实例化 searchfragment,因为 fragment 已经在 displayFragment 中启动。

谢谢

最佳答案

1.-抽屉(NavigationView)是一个ViewGroup,你可以在里面添加一个Fragment,然后做任何你想做的。

<android.support.design.widget.NavigationView
        android:id="@+id/nav_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:fitsSystemWindows="true"
        android:background="@drawable/side_nav_bar">

        <fragment
            android:id="@+id/drawerFragment"
            android:name="cl.cutiko.someapp.views.main.drawer.DrawerFragment"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

</android.support.design.widget.NavigationView>

2.- 如果您想使用默认实现,那么您不需要将每个函数都放在一个 fragment 中,您可以使用 Presenter 并将 Presenter 的结果返回给 View。请参阅 MVP 设计模式 here

关于android - 在不实例化实际 fragment 的情况下调用 fragment 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44790666/

相关文章:

java - 无法读取未定义的属性 MyToast.java

java - 修改适配器后 Butterknife 未加载布局

java - 如何使用 Fragments 为 Android 创建二维码生成器

java - 我的布局值没有更新

android - Nativescript 应用程序可以解压缩 zip 文件吗?

android - 顶级 Android Activity

java - 单击按钮后如何将 RecyclerView 适配器中的对话框的详细信息与另一个 fragment 相匹配

android - 使用颜色选择器更改 fragment 中编辑文本的背景颜色

android - SherlockFragment 的 Activity

Android Studio 3.2 金丝雀版本不呈现导航标签