java - 动态传递布局 ID

标签 java android favorites

我想实现一个“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 settersR.class但当然它们将在下一个版本中删除。

最佳答案

请参阅this问题,我想这就是你所需要的。基本上你可以通过使用字符串来获取资源...

int i = this.getResources().getIdentifier("cat", "layout", this.getPackageName());

here是 getIdentifier() 的文档。

关于java - 动态传递布局 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7271007/

相关文章:

每次添加一组新数据时,Java Hashmap 都会清除

android - 硬编码字符串导致 android list 中的错误

objective-c - 如何使用用户最喜欢的文件夹填充 NSPopUpButton

html - 如何为 iOS 主屏幕上的图标设置自定义 URL

ios - 使用indexPath.row保存收藏夹按钮状态

java - 使用 webdriver/java 从 txt 文件读取字符串并将其与下拉列表中的项目进行比较

java - 为什么CgLib BeanCopier中有一个无用的(在我看来)dup2

Android不同ABI兼容性

java - 在通用类中传递 int 数组

android - 通过自定义Socket实现的WebControl请求