java - 如何获取字符串并转换为 fragment 名称以启动类?

标签 java android class fragment

抱歉英语不好,我是巴西人,我正在使用翻译器。

我有一个带有选项卡的应用程序,我想简单地动态添加带有标题、图标或标题和图标的选项卡。

所以我开始构建以下类:

 public static class TabItens {
        TabLayout tabLayout;
        SectionsPagerAdapter mSPAdapter
        String titulo;
        int resId;

        public TabItens(TabLayout tabLayout, SectionsPagerAdapter mSPAdapter) {
            this.tabLayout = tabLayout;
            this.mSPAdapter = mSPAdapter;
        }

        public void AddTabItem(String tabfragment, String titulo) {
            tabLayout.addTab(tabLayout.newTab().setText(titulo));
            mSPAdapter.addFragment(new tabfragment);
        }

        public void AddTabItemIco(String tabfragment, String titulo, int resId) {
            tabLayout.addTab(tabLayout.newTab().setIcon(resId).setText(titulo));
            mSPAdapter.addFragment(new tabfragment);
        }
    }

我在处理它包含的行时遇到问题:mSPAdapter.addFragment(new tabfragment);

哪个必须兼容这个函数:

 public void addFragment(Fragment fragment) {
        mFragmentList.add(fragment);
    }

我该如何解决这个问题??

如有必要,请遵循完整的 Activity 类(class):https://pastebin.com/hFLUpHF2

最佳答案

由于 tabfragment 在您的代码中是一个 String,您不能调用 new tabfragment。这是不正确的,如果您的代码与您在此处发布的一样,则无法编译。

您可以使用 Class.forName() 方法从 fragment 类的名称创建 fragment 对象,假设您的所有 fragment 都在同一个包中并且您有 packagename它在一个 以正确格式命名为 fragmentPackage 的字符串,例如类似 com.app.frags 的字符串,那么您应该按照以下步骤操作:

try{
   Fragment fragment = (Fragment) Class.forName(fragmentPackage+ "." + tabfragment).newInstance();
} catch(ClassNotFoundException e) {
   e.printStackTrace();
}

所以你的addFragment方法应该是:

public void addFragment(String tabfragment) {
  try{
     Fragment fragment = (Fragment) Class.forName(fragmentPackage+ "." + tabfragment).newInstance();
     mFragmentList.add(fragment);
   } catch(ClassNotFoundException e) {
     e.printStackTrace();
  }       
}

关于java - 如何获取字符串并转换为 fragment 名称以启动类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49094069/

相关文章:

java - 如何删除所有 Activity 工具栏下的标高

java - MVC 应用程序中的 DocumentListener 验证错误

android - 在 requestNewReadPermissions 然后 requestNewPublishPermissions 之后未调用 StatusCallback

配置更改后 Java Android Badge Drawable 无法正常工作

c++ - 在头文件中声明对象 C++

java - 了解泛型 : Incompatible types when class has generic type and implements one of its parametrised superclass

android - 我的 meteor 应用程序中的人行横道错误 "XWalkAutofillClient::OnFirstUserGestureObserved()"

获取/设置属性的 C# 和 Silverlight 基本类语法不起作用

c++ - '.' 之前的预期主表达式

java - 基本 Java 程序无法在 Bluej 中运行