简体   繁体   English

如何根据json数组长度在对话框中添加动态复选框?

[英]How to add dynamic checkbox in dialog box according to json array length?

I want to add the dynamic checkbox inside dialog box with submit and cancel button and the checkbox should become according to the size of JSON array from API我想在对话框中添加带有提交和取消按钮的动态复选框,复选框应该根据 API 中的 JSON 数组的大小

  private void callDoctorTiming() {
    String request_url = GlobeStrings.BaseUrl + "/doctor-admin/apis/app.php?api=doctorTiming";
    pd = new ProgressDialog(getActivity());
    pd.setMessage(getResources().getString(R.string.Loading));
    pd.show();
    RequestQueue requestQueue = Volley.newRequestQueue(getActivity());
    final String response = null;
    final String finalResponse = response;
    StringRequest postRequest = new StringRequest(com.android.volley.Request.Method.POST,
            request_url, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            pd.dismiss();
            Log.e("@@TimeApi", response);
            try {

                JSONObject obj = new JSONObject(response);
                JSONObject objData = obj.getJSONObject("data");
                JSONArray jsonArray = objData.getJSONArray("time");


                if (!obj.getBoolean("error")) {

                    for (int i=0; i<jsonArray.length(); i++){



                        String time = jsonArray.getString(i);
                        Log.e("@@Time", time);



                    }

                  //  profileModel.setAvailability_time(profileModel.getAvailability_time() + "");
                   /* Toast.makeText(getActivity(), obj.getString("message"), Toast.LENGTH_SHORT).show();
                    onDateTime = obj.getString("data");
                    Log.e("@@ondateTime", onDateTime);*/
                } else {
                    Toast.makeText(getActivity(), obj.getString("message"), Toast.LENGTH_SHORT).show();
                }

            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    pd.dismiss();
                    Log.e(TAG, "error in api " + error.getMessage());
                }
            }
    ) {
        protected Map<String, String> getParams() {
            Map<String, String> params = new HashMap<>();
            params.put("doctor_id", "" + doctorID);
            params.put("available_date", "01-01-2020");
           // params.put("available_date", "" + date);
            return params;
        }
    };
    postRequest.setRetryPolicy(new DefaultRetryPolicy(0, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
    requestQueue.add(postRequest);
}

here in response, I am getting time inside response I want to add dynamic checkbox with time as I am getting from the response在这里作为回应,我在响应中获得了时间我想在我从响应中获得时间时添加动态复选框

here is my response from API这是我对 API 的回应

{
"error": false,
"data": {
    "time": [
        "10:00 am-04:00 pm"
    ]
},
"message": "success"
 }

here is my dialog layout :这是我的对话框布局:

  void showTimeDialog() {
    final Dialog dialog = new Dialog(getContext());
    dialog.setContentView(R.layout.time_layout);
    dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
    TextView tv_pcolse = (TextView) dialog.findViewById(R.id.tv_pcolse);
    TextView tv_submit = (TextView) dialog.findViewById(R.id.tv_submit);
    final CheckBox checkbox_time1 = (CheckBox) dialog.findViewById(R.id.checkbox_time1);
    checkbox_time1.setText("");

    tv_pcolse.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            dialog.dismiss();
        }
    });
    tv_submit.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (checkbox_time1.isChecked())
                profileModel.setAvailability_time(profileModel.getAvailability_time() + "" + 
         checkbox_time1.getText());
            else
                profileModel.setAvailability_time(profileModel.getAvailability_time() + "");

            dialog.dismiss();
        }
    });
    dialog.show();
}

here is my xml of dialog :这是我的对话框 xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="340dp"
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:background="@drawable/dialog_design">

<TextView
    android:layout_width="230dp"
    android:layout_height="wrap_content"
    android:text="@string/Whattimedoyouacceptonlinevisit"
    android:layout_gravity="center"
    android:gravity="center"
    android:textSize="20dp"
    android:textColor="#444141"
    android:layout_marginTop="20dp"/>
<CheckBox
    app:buttonTint="@color/dark_color"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginLeft="30dp"
    android:layout_marginTop="15dp"
    android:textSize="18sp"
    android:clickable="true"
    android:layoutDirection="rtl"
    android:textColor="#888282"
    android:textStyle="bold"
    android:id="@+id/checkbox_time1"
    android:layout_marginRight="30dp"/>

<LinearLayout
    android:layout_margin="15dp"
    android:layout_width="match_parent"
    android:layout_height="40dp"
    android:orientation="horizontal"
    android:background="#FF68B6DA"
    android:weightSum="2"
    android:gravity="center"
    android:layout_marginTop="10dp">

    <TextView
        android:id="@+id/tv_submit"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="@string/Submit"
        android:textColor="#fff"
        android:textSize="18dp"
        android:gravity="center"/>

    <View
        android:layout_width="1dp"
        android:layout_height="wrap_content"
        android:background="#fff"
        android:layout_marginTop="12dp"
        android:layout_marginBottom="12dp"/>
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="@string/Close"
        android:textColor="#fff"
        android:textSize="18dp"
        android:gravity="center"
        android:id="@+id/tv_pcolse"/>

</LinearLayout>

You can use RecyclerView to set Dynamic Checkbox您可以使用 RecyclerView 设置动态复选框

Here is full example of show checkboxes in RecyclerView :- https://www.11zon.com/zon/android/android-custom-image-gallery-with-checkbox-in-grid-to-select-multiple.php这是在 RecyclerView 中显示复选框的完整示例:- https://www.11zon.com/zon/android/android-custom-image-gallery-with-checkbox-in-grid-to-select-multiple.php

You can do it with Alert Dialog with multi choice option您可以使用带有多选选项的警报对话框来完成

See the references :请参阅参考资料:

1) https://stackoverflow.com/a/32324244/12650715 1) https://stackoverflow.com/a/32324244/12650715
2) https://android--code.blogspot.com/2015/08/android-alertdialog-multichoice.html 2) https://android--code.blogspot.com/2015/08/android-alertdialog-multichoice.html
3) https://www.android-examples.com/show-create-alertdialog-with-multiple-choices-in-android/ 3) https://www.android-examples.com/show-create-alertdialog-with-multiple-choices-in-android/

NOTE: Convert the json array to string array first注意:首先将 json 数组转换为字符串数组

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM