Android 根据字符串选择布局
因此,我的片段活动[从名称数组]从另一个片段获取一些字符串。我有很多XML布局的名称[来自同一个数组]。 例如,如果活动获取字符串“dogs”,我希望它设置/显示dogs.xml布局 很明显,我不能这样做: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
@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即可