Как сохранить значение множественного флажка в виде списка с 2-х мерным hashmap - PullRequest
0 голосов
/ 04 марта 2020

У меня есть hashmap для сохранения значения элемента, выбранного в 2-мерном hashmap

private HashMap<Integer, Boolean> itemBoolean = new HashMap<>();
private HashMap<Integer, HashMap<Integer, Boolean>> collectionBoolean = new HashMap<Integer, HashMap<Integer, Boolean>>();

Это функция для инициализации значения hashmap

    private void inisialisasiData(){
        Log.d(TAG, "inisialisasiData: "+sizeBrand);
        for (int i=0; i<sizeBrand; i++){
            for (int j=0; j<produks.size(); j++){
                itemBoolean.put(j,false);
                collectionBoolean.put(i, itemBoolean);
            }
        }
    }

Это функция для отображения данных в listview

    @Override
    public View getView(final int i, View view, ViewGroup viewGroup) {
        View convertView = view;
        ViewHolder viewHolder;

        Produk current = (Produk) produksSelected.get(i);

       if (convertView == null) {
            viewHolder = new ViewHolder();
            convertView = inflater.inflate(R.layout.listto_item, viewGroup, false);

            viewHolder.cbProduk = convertView.findViewById(R.id.cb_produk);
            convertView.setTag(viewHolder);
        }
        else{
            viewHolder = (ViewHolder) convertView.getTag();
        }

        Boolean currentCheck = collectionSparseBoolean.get(idxSelectedBrand).get(i);
        viewHolder.cbProduk.setChecked(currentCheck);

        viewHolder.cbProduk.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Boolean before = collectionBoolean.get(idxSelectedBrand).get(i);
                if (before){
                    checkCheckBox2(i, false);
                }else{
                    checkCheckBox2(i, true);
                }

            }
        });

Эта функция для изменения значения флажка и сохранения значения в hashmap

    private void checkCheckBox2(int position, boolean value) {
        if (value) {
            collectionSparseBoolean.get(idxSelectedBrand).put(position, true);
        } else {
            collectionSparseBoolean.get(idxSelectedBrand).put(position, false);
        }
    }

Когда я меняю счетчик, значение hashmap в текущем idxSelectedBrand совпадает с значение перед idxSelectedBrand. Значение должно быть false , потому что в начале инициализация false . до замены счетчика

после замены счетчика

...