获取数组中选中的复选框数据

问题描述 投票:0回答:1

[我有一个Android应用,在其中显示带有某些复选框的表单。我想根据选中的复选框来查询firestore。我无法获取已选中复选框的数组/数组列表。为了进行测试,我添加了一个textview。如果我的测试正常,我想使用新填充的数组/数组列表的成员设置textview的文本。

[当我选中任何复选框并单击按钮时,我的应用程序崩溃。假设我选中了box4。条件(item4.isChecked)应该为true,因此必须将item4添加到我的数组列表中,该数组列表的大小现在不等于零

if(item4.isChecked()){
            testingArrayList.add("item4");
        }

为什么我会得到数组长度为零的错误?

这是我的代码:

package com.example.XX;

import android.os.Bundle;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.navigation.NavController;
import androidx.navigation.Navigation;

import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.firestore.CollectionReference;
import com.google.firebase.firestore.DocumentSnapshot;
import com.google.firebase.firestore.FieldPath;
import com.google.firebase.firestore.FirebaseFirestore;
import com.google.firebase.firestore.Query;
import com.google.firebase.firestore.QuerySnapshot;

import java.util.ArrayList;
import java.util.List;

public class todayQuestionFragment extends Fragment {

    FirebaseFirestore db = FirebaseFirestore.getInstance();

    CheckBox item1;
    CheckBox item2;
    CheckBox item3;
    CheckBox item4;
    CheckBox item5;
    CheckBox item6;
    CheckBox item7;
    CheckBox item8;
    CheckBox item9;
    CheckBox item10;
    Button button;
    ProgressBar progressBar;

    TextView textView;//just for testing




    public todayQuestionFragment() {
        // Required empty public constructor
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_today_question, container, false);
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        item1=view.findViewById(R.id.checkBox_item1);
        item2=view.findViewById(R.id.checkBox_item2);
        item3=view.findViewById(R.id.checkBox_item3);
        item4=view.findViewById(R.id.checkBox_item4);
        item5=view.findViewById(R.id.checkBox_item5);
        item6=view.findViewById(R.id.checkBox_item6);
        item7=view.findViewById(R.id.checkBox_item7);
        item8=view.findViewById(R.id.checkBox_item8);
        item9=view.findViewById(R.id.checkBox_item9);
        item10=view.findViewById(R.id.checkBox_item10);
        textView=view.findViewById(R.id.testingCheckBox);


        Button button=view.findViewById(R.id.toMainQueryButton);
        final NavController navController= Navigation.findNavController(view);



        final ArrayList<String> testingArrayList = new ArrayList<String>();


        if(item1.isChecked()){
            testingArrayList.add("item1");
        }
        if(item2.isChecked()){
            testingArrayList.add("item2");
        }if(item3.isChecked()){
            testingArrayList.add("item3");
        }if(item4.isChecked()){
            testingArrayList.add("item4");
        }
        if(item5.isChecked()){
            testingArrayList.add("item5");
        }
        if(item6.isChecked()){
            testingArrayList.add("item6");
        }
        if(item7.isChecked()){
            testingArrayList.add("item7");
        }if(item8.isChecked()){
            testingArrayList.add("item8");
        }if(item9.isChecked()){
            testingArrayList.add("item9");
        }
        if(item10.isChecked()){
            testingArrayList.add("item10");
        }

         final String[] testArray = new String[testingArrayList.size()];
        for(int j =0;j<testingArrayList.size();j++){
            testArray[j] = testingArrayList.get(j);
        }


        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                textView.setText(testArray[0]);

            }
        });
    }

}

Logcat:

2020-06-12 14:48:10.772 4622-4622/com.example.XX E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.XX, PID: 4622
    java.lang.ArrayIndexOutOfBoundsException: length=0; index=0
        at com.example.XX.todayQuestionFragment$1.onClick(todayQuestionFragment.java:140)
        at android.view.View.performClick(View.java:7201)
        at android.view.View.performClickInternal(View.java:7170)
        at android.view.View.access$3500(View.java:806)
        at android.view.View$PerformClick.run(View.java:27582)
        at android.os.Handler.handleCallback(Handler.java:883)
        at android.os.Handler.dispatchMessage(Handler.java:100)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7710)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:516)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
java android android-checkbox
1个回答
0
投票

发现我的错误。我的所有带有if条件和arraylist / array的逻辑都需要在我的按钮的onClickListener内添加]

© www.soinside.com 2019 - 2024. All rights reserved.