我想实现一个“Collection 夹列表”,假设我有一个空布局。在onCreate()
有super.onCreate(savedInstanceState); setContentView(R.layout.main);
然后我打开一个包含我最喜欢的动物的数据库,加载一些内容并向布局添加动态按钮。
数据库架构是这样的:
CREATE TABLE animals(_id INTEGER PRIMARY KEY, name TEXT NOT NULL, layout TEXT NOT NULL)
数据库中有:
_id - - - - - - - - name - - - - - - - - - layout<br/>
1 - - - - - - - - -- cat - - - - - - - - -- R.layout.cat<br/>
2 - - - - - - - - -- dog - - - - - - - - -- R.layout.dog<br/>
3 - - - - - - - - -- turtle - - - - - - - - R.layout.turtle
当然是布局/xml文件(R.layout.cat, R.layout.dog, R.layout.turtle)
存在。
然后你会看到三个按钮,分别写着“猫”、“狗”和“乌龟”。在 OnClickListener
有以下内容:
Intent intent = new Intent(MyFavorites.this, Animal.class);
Log.d ("onClick", button.getmyLayout());
// Shows either R.layout.cat, R.layout.dog or R.layout.turtle
// depending on what button was pressed. This works fine.
intent.putExtra("myLayout", button.getmyLayout());
// closes the database
myDbHelper.close();
startActivity(intent);
Animal.class
可以显示所有的animal-xml-文件,因为它们都具有相同的功能。这就是为什么布局总是传递给同一个类!
动物类:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final int myLayout = getIntent().getIntExtra("myLayout", R.layout.main);
setContentView(myLayout);
}
现在问题来了。我传递的是字符串而不是整数,在日志猫中有:
Key myLayout expected Integer but value was a java.lang.String. The default value 2130903044 was returned.
默认值是 R.layout.main,您可以在自动生成的 R.class
中找到它作为十六进制数,十进制数是 2130903044。所以我确实理解错误消息。但我想不出另一种方法来解决这个问题。我在想getters and setters
在 R.class
但当然它们将在下一个版本中删除。
最佳答案
请参阅this问题,我想这就是你所需要的。基本上你可以通过使用字符串来获取资源...
int i = this.getResources().getIdentifier("cat", "layout", this.getPackageName());
和here是 getIdentifier() 的文档。
关于java - 动态传递布局 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7271007/