0

因此,我的片段活动从另一个片段中获取了一些字符串 [来自名称数组]。而且我有很多名称为 [来自同一个数组] 的 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;
}

当然,我可以让它与Switch/Case一起使用,但我确信可以按照我想象的方式对其进行编码。谢谢你的帮助。

4

3 回答 3

0

UsingonCreateView()表示您指的是您的片段代码,而不是活动的 . 最简单的方法是简单地将字符串传递给使用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;
}
于 2013-07-07T18:52:03.793 回答
0

这就是您要查找的内容:

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

(我不会为变量使用完整的大写名称)

于 2013-07-07T18:55:12.870 回答
0

如何按名称加载布局:

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

不过要小心。如果您混淆您的应用程序,这可能会失败。

于 2013-07-07T18:55:29.217 回答