簡體   English   中英

檢查自定義對象ArrayList的屬性是否為空字符串?

[英]Check if a property of a custom object ArrayList is an empty string or not?

如果自定義對象Arraylist(arrQues)的代碼屬性不包含任何內容,我想隱藏WebView對象(txtCode)。

if (arrQues.get(count).code.isEmpty())
            txtCode.setVisibility(View.GONE);

它是從數據庫表中獲取的自定義對象的ArrayList,如下所示

在此輸入圖像描述

如果代碼屬性包含代碼,那么我已動態添加規則到布局,如下所示:

            if (!(arrQues.get(count).code.isEmpty())) {

            submit_params.removeRule(RelativeLayout.BELOW);

            submit_params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
            submit_params.bottomMargin = (int) convertPxToDp(getContext(), convertDpToPx(getContext(), 15));
            main_params.addRule(RelativeLayout.ABOVE, submitContainer.getId());

            mainContainer.setLayoutParams(main_params);
            submitContainer.setLayoutParams(submit_params);
}

問題是當我加載第二個問題等等......布局搞砸了,當前的問題編號沒有顯示為2,即使它的2如下所示:

第一個問題

第二個問題

這兩個問題只出現在我使用的時候出現... arrQues.get(count).code.isEmpty()我還嘗試使用“”代替isEmpty()甚至是null,但結果是相同的。

另外我注意到的只是那些從數據庫中加載的問題,這些問題在代碼列中都有。

下面是Java文件的完整代碼

    public class QuestionsFragment extends Fragment implements View.OnClickListener {
    TextView txtTimer, txtStatus;
    LinearLayout boxA, boxB, boxC, boxD, mainContainer;
    RelativeLayout submitContainer;

    RelativeLayout.LayoutParams submit_params;
    RelativeLayout.LayoutParams main_params;

    ScrollView scrollView;
    Button btnSubmit;

    DBHelper dbHelper;

    SharedPreferences sharedPreferences;

    TextView txtQues;
    WebView txtCode;
    TextView txtOptA, txtOptB, txtOptC, txtOptD;
    String ans;
    ArrayList<QuestionModal> arrQues = new ArrayList<>();
    ArrayList<String> arrAnswers = new ArrayList<>();

    CountDownTimer countDownTimer;
    boolean timerSwitch;

    int selectedVal, id;

    int curr_quesNo = 0;
    int count = 0;
    int right = 0;
    int non_attempted = 0;

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


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

        txtQues = view.findViewById(R.id.txtQues);
        txtOptA = view.findViewById(R.id.txtOptionA);
        txtOptB = view.findViewById(R.id.txtOptionB);
        txtOptC = view.findViewById(R.id.txtOptionC);
        txtOptD = view.findViewById(R.id.txtOptionD);
        txtCode = view.findViewById(R.id.txtCode);
        txtStatus = view.findViewById(R.id.txtStatus);

        boxA = view.findViewById(R.id.boxA);
        boxB = view.findViewById(R.id.boxB);
        boxC = view.findViewById(R.id.boxC);
        boxD = view.findViewById(R.id.boxD);

        scrollView = view.findViewById(R.id.scrollView);
        btnSubmit = view.findViewById(R.id.btnSubmit);

        submitContainer = view.findViewById(R.id.submitContainer);
        mainContainer = view.findViewById(R.id.mainContainer);
        submit_params = new RelativeLayout.LayoutParams(MATCH_PARENT, WRAP_CONTENT);
        main_params = new RelativeLayout.LayoutParams(MATCH_PARENT, WRAP_CONTENT);

        sharedPreferences = getActivity().getSharedPreferences("PrefFile", MODE_PRIVATE);

        timerSwitch = sharedPreferences.getBoolean("timer_switch", true);

        selectedVal = sharedPreferences.getInt("selectedVal", 10);

        dbHelper = DBHelper.getDB(getActivity(), sharedPreferences.getString("db_name", null));

        if (!dbHelper.checkDB()) {
            dbHelper.createDB(getActivity());
        }

        dbHelper.openDB();

        String levelKey = sharedPreferences.getString("level_key", null);

        arrQues = dbHelper.getQues(levelKey, selectedVal);

        loadQues(timerSwitch);

        txtTimer = view.findViewById(R.id.txtTimer);

        switch (sharedPreferences.getString("db_name", null)) {
            case "Android":
                ((MainActivity) getActivity()).setFragTitle("Android Quiz");
//                topicLogo.setImageResource(R.drawable.ic_nature_people_black_24dp);
                break;
            case "Java":
                ((MainActivity) getActivity()).setFragTitle("Java Quiz");
//                topicLogo.setImageResource(R.drawable.ic_nature_people_black_24dp);
                break;
            case "C":
                ((MainActivity) getActivity()).setFragTitle("C Quiz");
                ((MainActivity) getActivity()).setFragLogo(R.drawable.ic_home_black_24dp);
                break;
            case "C++":
                ((MainActivity) getActivity()).setFragTitle("C++ Quiz");
                break;
            case "Python":
                ((MainActivity) getActivity()).setFragTitle("Python Quiz");
                break;
            case "Kotlin":
                ((MainActivity) getActivity()).setFragTitle("Kotlin Quiz");
                break;

        }

        btnSubmit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (timerSwitch)
                    countDownTimer.cancel();

                if (id == 0) {
                    non_attempted++;
                    arrAnswers.add("NotAttempted");
                    Toast.makeText(getActivity(), "Not Attempted!", Toast.LENGTH_SHORT).show();
                }

                switch (id) {
                    case R.id.boxA:
                        arrAnswers.add("A");
                        break;
                    case R.id.boxB:
                        arrAnswers.add("B");
                        break;
                    case R.id.boxC:
                        arrAnswers.add("C");
                        break;
                    case R.id.boxD:
                        arrAnswers.add("D");
                        break;
                }

                if ((id == R.id.boxA && ans.equals("A"))
                        || (id == R.id.boxB && ans.equals("B"))
                        || (id == R.id.boxC && ans.equals("C"))
                        || (id == R.id.boxD && ans.equals("D"))) {

                    right++;
                    count++;
                    Toast.makeText(getActivity(), "RIGHT!", Toast.LENGTH_SHORT).show();

                    if (count < arrQues.size()) {
                        loadQues(timerSwitch);
                    } else {
                        sendResult();
                    }

                } else {
                    count++;
                    if (count < arrQues.size()) {
                        loadQues(timerSwitch);
                    } else {
                        sendResult();
                    }
                }

            }
        });
        return view;
    }

    public void setBtnDefault() {
        boxA.setBackgroundColor(getResources().getColor(android.R.color.transparent));
        boxB.setBackgroundColor(getResources().getColor(android.R.color.transparent));
        boxC.setBackgroundColor(getResources().getColor(android.R.color.transparent));
        boxD.setBackgroundColor(getResources().getColor(android.R.color.transparent));
    }

    public void sendResult() {
        int attempted = selectedVal - non_attempted;

        Gson gson = new Gson();
        String jsonAnswers = gson.toJson(arrAnswers);
        String jsonQues = gson.toJson(arrQues);

        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putInt("right_key", right);
        editor.putInt("wrong_key", attempted - right);
        editor.putInt("total_key", selectedVal);
        editor.putInt("attempted_key", attempted);
        editor.putString("arr_answers", jsonAnswers);
        editor.putString("arr_ques", jsonQues);
        editor.commit();

        ((MainActivity) getActivity()).AddFrag(new ResultFragment(), 1);

    }

    public void LoadTimer() {

        countDownTimer = new CountDownTimer(60000, 1000) {
            @Override
            public void onTick(long millisUntilFinished) {
                txtTimer.setText("0:" + millisUntilFinished / 1000);
            }

            @SuppressLint("SetTextI18n")
            @Override
            public void onFinish() {
                txtTimer.setText("Time Over");
            }
        };
    }

    @SuppressLint("NewApi")
    public void loadQues(boolean timer_switch) {
        try {
            id = 0;
            setBtnDefault();

            if (timer_switch) {
                LoadTimer();
                countDownTimer.start();
            }

            curr_quesNo++;

            txtStatus.setText(curr_quesNo + "/" + selectedVal);

            txtOptC.setVisibility(View.VISIBLE);
            txtOptD.setVisibility(View.VISIBLE);
            txtCode.setVisibility(View.VISIBLE);

            main_params.removeRule(RelativeLayout.ABOVE);
            submit_params.removeRule(RelativeLayout.ALIGN_PARENT_BOTTOM);

            submit_params.addRule(RelativeLayout.BELOW, mainContainer.getId());
            submit_params.topMargin = (int) convertPxToDp(getContext(), convertDpToPx(getContext(), 70));

            mainContainer.setLayoutParams(main_params);
            submitContainer.setLayoutParams(submit_params);

            txtQues.setText(arrQues.get(count).ques);
            txtOptA.setText(arrQues.get(count).optionA);
            txtOptB.setText(arrQues.get(count).optionB);
            txtOptC.setText(arrQues.get(count).optionC);
            txtOptD.setText(arrQues.get(count).optionD);

            txtCode.loadDataWithBaseURL(null, arrQues.get(count).code, "text/html", null, null);

            if (txtOptC.getText().toString().isEmpty())
                txtOptC.setVisibility(View.GONE);

            if (txtOptD.getText().toString().isEmpty())
                txtOptD.setVisibility(View.GONE);

            if (arrQues.get(count).code.isEmpty())
                txtCode.setVisibility(View.GONE);

            if (!(arrQues.get(count).code.isEmpty())) {

                submit_params.removeRule(RelativeLayout.BELOW);

                submit_params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
                submit_params.bottomMargin = (int) convertPxToDp(getContext(), convertDpToPx(getContext(), 15));
                main_params.addRule(RelativeLayout.ABOVE, submitContainer.getId());

                mainContainer.setLayoutParams(main_params);
                submitContainer.setLayoutParams(submit_params);

                new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        scrollView.arrowScroll(View.FOCUS_DOWN);

                    }
                }, 1000);
            }

            ans = arrQues.get(count).answer;

            boxA.setOnClickListener(this);
            boxB.setOnClickListener(this);
            boxC.setOnClickListener(this);
            boxD.setOnClickListener(this);
        } catch (Exception e) {
            ((MainActivity) getActivity()).AddFrag(new QuestionsFragment(), 1);
        }
    }

    @Override
    public void onClick(View v) {
        setBtnDefault();
        id = v.getId();
        v.setBackgroundColor(getResources().getColor(R.color.colorPrimary));
    }

    public float convertDpToPx(Context context, float dp) {
        return dp * context.getResources().getDisplayMetrics().density;
    }

    public float convertPxToDp(Context context, float px) {
        return px / context.getResources().getDisplayMetrics().density;
    }
}

我解決了所有問題,因為arrQues.get(count).code從數據庫中獲取空值(“Code”列具有空值)。 一旦我用空字符串替換空值“”isEmpty()完美地工作。 我猜isEmpty()不能使用空值,只適用於空字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM