设置条件复选框,在android中

时间:2014-10-18 18:08:15

标签: java android checkbox

在我的活动中,我创建了多个这样的复选框项,其中复选框的文本来自我的SQLite数据库

finaldb.open();
            String[] db_data = finaldb.getdbdata(sensIds[i]);
            finaldb.close();
    for (int j = 0; j < db_data.length; j++) {
                        cb = new CheckBox(getApplicationContext());
                        cb.setButtonDrawable(id);
                        cb.setText(db_data[j]);
                        mainLayout.addView(cb);
                } 

现在,我想在我的BUTTON上设置一个条件,如果选中任何复选框,则应启动activityA,或者在其他情况下启动activityB。 我正试图这样做,

if(cb.isChecked()) {

//ActivityA start 
}
else {

//ActivityB start
}

但它给了我IndexOutOfBoundExceptionError。任何人都可以帮助我朝着正确的方向前进吗?

编辑: 当我删除我的if else条件并仅使用ActivityA时,代码完全正常,但是当使用这个if else条件时,它只考虑else条件并且每次都启动ActivityB。

这是我的logcat报告,

10-18 15:10:33.065: E/AndroidRuntime(1138): FATAL EXCEPTION: main
10-18 15:10:33.065: E/AndroidRuntime(1138): Process: com.example.mydb, PID: 1138
10-18 15:10:33.065: E/AndroidRuntime(1138): java.lang.IndexOutOfBoundsException: Invalid index 2, size is 2
10-18 15:10:33.065: E/AndroidRuntime(1138):     at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
10-18 15:10:33.065: E/AndroidRuntime(1138):     at java.util.ArrayList.get(ArrayList.java:308)
10-18 15:10:33.065: E/AndroidRuntime(1138):     at com.example.mydb.FinalActivity.onClick(FinalActivity.java:219)
10-18 15:10:33.065: E/AndroidRuntime(1138):     at android.view.View.performClick(View.java:4438)
10-18 15:10:33.065: E/AndroidRuntime(1138):     at android.view.View$PerformClick.run(View.java:18422)
10-18 15:10:33.065: E/AndroidRuntime(1138):     at android.os.Handler.handleCallback(Handler.java:733)
10-18 15:10:33.065: E/AndroidRuntime(1138):     at android.os.Handler.dispatchMessage(Handler.java:95)
10-18 15:10:33.065: E/AndroidRuntime(1138):     at android.os.Looper.loop(Looper.java:136)
10-18 15:10:33.065: E/AndroidRuntime(1138):     at android.app.ActivityThread.main(ActivityThread.java:5017)
10-18 15:10:33.065: E/AndroidRuntime(1138):     at java.lang.reflect.Method.invokeNative(Native Method)
10-18 15:10:33.065: E/AndroidRuntime(1138):     at java.lang.reflect.Method.invoke(Method.java:515)
10-18 15:10:33.065: E/AndroidRuntime(1138):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
10-18 15:10:33.065: E/AndroidRuntime(1138):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
10-18 15:10:33.065: E/AndroidRuntime(1138):     at dalvik.system.NativeStart.main(Native Method)

4 个答案:

答案 0 :(得分:1)

好的,如果您有多个属于同一系列的复选框,并且您希望应用条件,如果选中其中任何一个,则应启动ActivityA。 你可以尝试这样的事情,

  for (int i = 0; i < mainLayout.getChildCount(); i++) {
                    if (mainLayout.getChildAt(i) instanceof CheckBox) {
                        CheckBox cb = (CheckBox) mainLayout.getChildAt(i);
                        if (cb.isChecked()) {
                        //Start ActivityA
                            }
                        else {
                         //Start ActivityB
                         }

答案 1 :(得分:0)

检查String[] db_data = finaldb.getdbdata(sensIds[i]);

错误几乎肯定存在

注意

返回的值
.getdbdata(sensIds[i]);`

错误是相对于只有2个元素的ArrayList而你的代码试图访问位置2中的元素:第三个不存在的元素。

答案 2 :(得分:0)

@colonelcode,如果按钮监听器有问题,那么即使ActivityB也不会启动。 P.S:没有足够的声誉在评论中写这个,这就是为什么我必须单独写答案。

答案 3 :(得分:-1)

我同意,使用断点检查循环的每次迭代,并查看每个索引的数据。也许你的getdbdata()方法有错误?

您是否仍然在复选框检查中启动活动时遇到问题?