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