Android 根据字符串选择布局

Android 根据字符串选择布局,android,android-layout,Android,Android Layout,因此,我的片段活动[从名称数组]从另一个片段获取一些字符串。我有很多XML布局的名称[来自同一个数组]。 例如,如果活动获取字符串“dogs”,我希望它设置/显示dogs.xml布局 很明显,我不能这样做: @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { String LAYOUT_NAME = get

因此,我的片段活动[从名称数组]从另一个片段获取一些字符串。我有很多XML布局的名称[来自同一个数组]。 例如,如果活动获取字符串“dogs”,我希望它设置/显示dogs.xml布局

很明显,我不能这样做:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    String LAYOUT_NAME = getArguments().getString("layout_name");
    View v = inflater.inflate(R.layout.LAYOUT_NAME, container, false);
    return v;
}
当然,我可以让它与开关/Case一起工作,但我确信它可以按照我想象的方式编码。感谢您的帮助。

使用
onCreateView()
表示您引用的是片段代码,而不是活动。最简单的方法是使用
setArguments()
简单地将该字符串传递给片段。然后,您可以在片段中执行
getArguments()
,检查值并根据需要膨胀适当的布局

编辑

public Integer getLayoutIdByName( String name ) {
    Integer layoutId = null;

    try {
        Class res = R.layout.class;
        Field field = res.getField( name );
        layoutId = field.getInt(null);
    }
    catch (Exception e) {
        // no such layout
    }

    return layoutId;
}

这就是您正在寻找的:

int id= getResources().getIdentifier(LAYOUT_NAME, "layout", getPackageName());

(我不会对变量使用大写全名)

如何按名称加载布局:

 setContentView(getResources().getIdentifier("name_of_layout", "layout", "yourpackagename"),);

不过要小心。如果你破坏了你的应用程序,这可能会失败。

是的,我写了它的片段活动,获取该字符串不是问题。问题是使用此字符串作为布局名称,例如,如果string=“dogs”-open dogs.xml,则可以这样做(请参见编辑的答案),但可以有多少不同的字符串?10? 如果是这样,只需简单地
if/else
construct即可