2013-07-07 95 views
0

所以,我的片段活动从另一个片段获取一些[来自名称数组的字符串]。而且我有很多XML布局,名称都是[来自同一个数组]。 例如,如果活动获得字符串“狗”,我希望它设置/显示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; 
} 

当然,我可以把它与开关/外壳工作,但我敢肯定,这是可能的代码时我想象的方式。谢谢你的帮助。

回答

0

这是你在找什么:

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

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

+0

非常感谢,那很好! –

0

使用onCreateView()表示您引用您的片段代码,而不是活动的。最简单的方法是使用setArguments()将该字符串传递给片段。然后你就可以在你的片段做,检查值和膨胀布局合理,只要你想

编辑

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; 
} 
+0

是的,我写了它的片段活动,并没有问题得到该字符串。问题是使用这个字符串AS布局名称,例如如果string =“dogs” - 打开dogs.xml –

+0

这可以完成(请参阅编辑的答案),但可以有多少个不同的字符串? 10?如果是这样,只要简单地说'if/else'构造 –

0

如何按名称加载布局:

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

但要小心。这可能会失败,如果你obsfucate你的应用程序。