我有一个像这样的超类:
public class SuperClass extends Activity
和一个儿童班
public class ChildClass extends SuperClass
SuperClass包含一个设置布局的功能
public void setTabBar(String layout){
inflater.inflate(...., ...);
}
我的子类和超类中唯一不同的是布局。所以我的问题:
无论如何我可以将字符串发送到超类方法setTabBar("name of the layout")
;然后加强布局。我试过这个:
public void setTabBar(String layout) {
int layoutFromString = Integer.parseInt("R.layout."+layout);
inflater.inflate(layoutFromString, null);
}
但这似乎不起作用。有任何想法吗?
修改
如上所述,我试过这个:
public void setTabBar(int id) {
inflater.inflate(id, null);
}
这个将适用于SuperClass,但是当我从子类中调用这个函数时:
public class TestClass extends SuperClass{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTabBar(R.layout.test);
}
}
LogCat只输出:
07-23 13:57:15.775: E/AndroidRuntime(7329): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1053)
答案 0 :(得分:4)
int layoutFromString = Integer.parseInt("R.layout."+layout);
给你一个NumberFormatException,因为String“R.layout.yourLayoutId”不是一个数字,它的字符串。 要查找layoutName的id,请使用:
getResources().getIdentifier("YOUR_LAYOUT_NAME",
"layout", context.getPackageName());
答案 1 :(得分:1)
您正在尝试解析传入setTabBar的字符串中的整数。需要反射将变量名称转换为实际值,我个人不想踩掉那个兔子洞。
为什么不指定传入的参数是整数?
public void setTabBar(int layoutId) {
inflater.inflate(....,....);
}
而且,在通话类中:
activity.setTabBar(R.layout.nifty_layout);
答案 2 :(得分:0)
这样的事情应该有效:
public abstract class SuperClass extends Activity{
public void setTabBar(String layout){
inflater.inflate(getResId(), null);
}
protected abstract int getResId();
}
public class ChildClass extends SuperClass{
@Override
protected abstract int getResId(){
return R.layout.child;
}
}
我不确定这是你想要的。我希望这会对你有所帮助。