超级和布局android

时间:2012-07-23 11:44:47

标签: android

我有一个像这样的超类:

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)

3 个答案:

答案 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;
    }
}

我不确定这是你想要的。我希望这会对你有所帮助。