Элементы списка просмотра с установленным флажком при запуске - PullRequest
0 голосов
/ 27 июня 2019

У меня есть фрагмент с listView.

Представление заполняется из удаленного полученного массива JSON следующим образом:

private void callVolley(){



        SharedPreferences prefs3 =
                getActivity().getSharedPreferences(MIEXAMEN, Context.MODE_PRIVATE);

        final String id_materia= "42";
        final String num_examen= "787878";
        pDialog = new ProgressDialog(getActivity());
        pDialog.setMessage("Cargando temas de la materia seleccionada...");
        showDialog();


        JsonArrayRequest jArr = new JsonArrayRequest(url+"?id="+id_materia, new Response.Listener<JSONArray>() {
            @Override
            public void onResponse(JSONArray response) {
                Log.d(TAG, response.toString());
                hideDialog();




                // Parsing json
                for (int i = 0; i < response.length(); i++) {
                    try {
                        JSONObject obj = response.getJSONObject(i);

                        Data item = new Data();

                        item.setMenu(obj.getString(TAG_NOMBRE));
                        item.setId(obj.getString(TAG_ID));


                        itemList.add(item);



                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }

                // list.invalidateViews();
                adapter.notifyDataSetChanged();



            }
        }, new Response.ErrorListener() {

            @Override
            public void onErrorResponse(VolleyError error) {
                VolleyLog.d(TAG, "Error: " + error.getMessage());
                hideDialog();
            }
        });


        AppController.getInstance().addToRequestQueue(jArr);
    }

Затем я программно добавляю флажок для каждого элемента списка.Это адаптер:

 public class Adapter extends BaseAdapter {

    private Context activity;
    private ArrayList<Data> data;
    private static LayoutInflater inflater = null;
    private View vi;
    private ViewHolder viewHolder;

    public Adapter(Context context, ArrayList<Data> items) {
        this.activity = context;
        this.data = items;
        inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    @Override
    public int getCount() {
        return data.size();
    }

    @Override
    public Object getItem(int i) {
        return i;
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    @Override
    public View getView(int position, View view, ViewGroup viewGroup) {
        vi = view;
        final int pos = position;
        Data items = data.get(pos);

        if(view == null) {
            vi = inflater.inflate(R.layout.list_row, null);
            viewHolder = new ViewHolder();
            viewHolder.checkBox = (CheckBox) vi.findViewById(R.id.cb);
            viewHolder.menu = (TextView) vi.findViewById(R.id.nama_menu);
            vi.setTag(viewHolder);
        }else {
            viewHolder = (ViewHolder) view.getTag();

        }
        viewHolder.menu.setText(items.getMenu());
        if(items.isCheckbox()){
            viewHolder.checkBox.setChecked(true);
        } else {
            viewHolder.checkBox.setChecked(false);
        }

        return vi;
    }

    public ArrayList<Data> getAllData(){
        return data;
    }

    public void setCheckBox(int position){
        Data items = data.get(position);
        items.setCheckbox(!items.isCheckbox());
        notifyDataSetChanged();
    }

    public class ViewHolder{
        TextView menu;
        CheckBox checkBox;
    }
}

При запуске мне нужно проверить все флажки.

Затем пользователь может установить или снять флажки с нужных элементов.

На фрагменте есть кнопка, которая читает все состояния элементов флажка.

Что я должен реализовать, чтобы поставить всеэлементы в статусе проверены, чтобы при нажатии кнопки все элементы распознавались как отмеченные?

Это снимок экрана при запуске, когда все элементы не отмечены: enter image description here

РЕДАКТИРОВАТЬ

Код кнопки onClickListener во фрагменте:

 fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                checkbox = "";
                checkbox_id = "";

                for (Data hold : adapter.getAllData()) {
                    if (hold.isCheckbox()) {
                        checkbox += "\n" + hold.getMenu();
                        checkbox_id +=  hold.getId()+",";


                    }
                }
                if (!checkbox.isEmpty()) {
                    dipilih = checkbox;
                    String preguntas = checkbox_id;
                    mPref = getActivity().getSharedPreferences(MIEXAMEN, Context.MODE_PRIVATE);


                    SharedPreferences.Editor editor = mPref.edit();




                    editor.putString("preguntas_numero_string",preguntas);
                    editor.putString("preguntas_string",dipilih);

                    Log.d("seleccion","seleccion preguntas "+preguntas);
                    Log.d("seleccion","seleccion dipilih "+dipilih);

                    editor.apply();




                } else {
                    dipilih = "No has seleccionado ningún tema.";
                }

                formSubmit(dipilih);
            }
        });

Ответы [ 3 ]

1 голос
/ 27 июня 2019

Выполните следующие изменения:

При добавлении данных в список данных.

                    Data item = new Data();

                    item.setMenu(obj.getString(TAG_NOMBRE));
                    item.setId(obj.getString(TAG_ID));
                    item.setCheckbox(true)

                    itemList.add(item);

Первоначально флажок будет установлен.

Редактировать:

Обновите свой макет xml. в свой чекбокс поставь этот атрибут.

android:clickable="false"

Обновить свой список setOnItemClickListener

    list.setOnItemClickListener(new OnItemClickListener() {
          @Override
          public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            adapter.setCheckBox(position);
          }
    });
0 голосов
/ 27 июня 2019

Используйте это.Он должен работать.-

Первоначально это -

viewHolder.checkBox.setChecked(true);

Затем

  viewHolder.checkBox.setOnCheckedChangeListener(new 
  CompoundButton.OnCheckedChangeListener() {

    @Override
   public void onCheckedChanged(CompoundButton 
     buttonView,boolean isChecked) {
   if(isChecked){
           viewHolder.checkBox.setChecked(true);
       } else {
           viewHolder.checkBox.setChecked(false);
       }
   }

});

0 голосов
/ 27 июня 2019

Попробуйте заменить на приведенный ниже код

viewHolder.checkBox.setChecked(true);

вместо

if(items.isCheckbox()){
            viewHolder.checkBox.setChecked(true);
        } else {
            viewHolder.checkBox.setChecked(false);
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...