抱歉英语不好,我是巴西人,我正在使用翻译器。
我有一个带有选项卡的应用程序,我想简单地动态添加带有标题、图标或标题和图标的选项卡。
所以我开始构建以下类:
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/