如何获取字符串并转换为片段名称以启动类?

问题描述 投票:1回答:1

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

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

所以我开始构建以下类:

 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);
    }

我怎么解决这个?

如有必要,请按照完整的活动类:https://pastebin.com/hFLUpHF2

java android class fragment
1个回答
0
投票

由于tabfragment在你的代码中是String,你不能称之为new tabfragment。它是不正确的,如果你在这里发布,你的代码将无法编译。

您可以使用Class.forName()方法从片段类的名称创建片段对象,假设您的所有片段都在同一个包中,并且您在一个名为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();
  }       
}
© www.soinside.com 2019 - 2024. All rights reserved.