Java Android-以编程方式添加按钮,设置ID崩溃

Java Android-以编程方式添加按钮,设置ID崩溃,java,android,dynamic,error-handling,Java,Android,Dynamic,Error Handling,根据加载的配置,我以编程方式将x个按钮添加到视图中(以10为例)。我很好地创建了10,当我没有设置ID时,或者当我使用Androids generateId()函数时,它可以工作,但是我想使用迭代器(I)来设置ID,这样迭代的每个值都与它创建的按钮匹配 i、 e 您可以在for中使用并创建从ArrayList获取按钮的方法 试试这个: public class YourClass { public ArrayList<Integer> ids = new ArrayList

根据加载的配置,我以编程方式将x个按钮添加到视图中(以10为例)。我很好地创建了10,当我没有设置ID时,或者当我使用Androids generateId()函数时,它可以工作,但是我想使用迭代器(I)来设置ID,这样迭代的每个值都与它创建的按钮匹配

i、 e

您可以在for中使用并创建从ArrayList获取按钮的方法

试试这个:

public class YourClass {

    public ArrayList<Integer> ids = new ArrayList<>();

    public void generateButtons(){
        for (int i = 0; i< 10; i++) {
            ids.add(View.generateViewId());
            // your code to create the button
            button.setId(ids.get(i));
        }
    }

    public Button getButton(int index){
        return (Button) findViewById(ids.get(index));
    }

}
公共类您的类{
public ArrayList id=new ArrayList();
公共无效生成按钮(){
对于(int i=0;i<10;i++){
add(View.generateViewId());
//创建按钮的代码
setId(id.get(i));
}
}
公共按钮getButton(整数索引){
返回(按钮)findViewById(id.get(索引));
}
}

或者只是创建一个按钮的数组列表…

这可能会有帮助,为什么不使用
button.setTag(“yourID”)
如果我给它一个ID,它不保存在保存的包中创建的事实吗?否则,每次切换回片段时,我只会创建10个新按钮。我认为您的问题是将相同的id设置为另一个视图。请确保您的活动在清单中配置了对特定案例的更改,并在onConfigChange中处理您的解决方案。谢谢…实际上,我的唯一ID从400开始并迭代了大量按钮,我猜另一个ID/视图之间存在ID冲突…lol。我花了相当多的时间研究演员阵容,而不是其他帖子,我想我只是想在button和uniqueID之间有一个对应的id,但这样就可以了。谢谢
 01-25 17:46:18.197  13236-13236/? E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.ClassCastException: android.view.AbsSavedState$1 cannot be cast to android.widget.CompoundButton$SavedState
        at android.widget.CompoundButton.onRestoreInstanceState(CompoundButton.java:379)
public class YourClass {

    public ArrayList<Integer> ids = new ArrayList<>();

    public void generateButtons(){
        for (int i = 0; i< 10; i++) {
            ids.add(View.generateViewId());
            // your code to create the button
            button.setId(ids.get(i));
        }
    }

    public Button getButton(int index){
        return (Button) findViewById(ids.get(index));
    }

}