vendredi 7 juin 2019

checkbox uncheck and row values of listview are not updated

Confusing at it may seem, I am confused of what is happening too. I have an application in which there is a listview that displays values and when a row is pressed, the third value of the row will display a value.

Example is: third value is 30 and when it's pressed, it should be divided by 6, so the answer should be 5.

But when I scroll in the listview, the checkbox becomes unchecked and the third value of the row goes back to its old value (30).

Is there any way to keep the checkbox from being checked and the value of the row preserved when clicked?

Here's the snippet of my code.

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @RequiresApi(api = Build.VERSION_CODES.N)
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            CheckBox checkBox = (CheckBox)view.findViewById(R.id.checkmark);
            TextView tv3 = (TextView)view.findViewById(R.id.tx_counter);
            EditText editText = (EditText)findViewById(R.id.editText3);
            String yy = editText.getText().toString().trim();
            String shitts = listView.getItemAtPosition(position).toString();
            try {
                String[] a = shitts.split(", ");
                String[] b = a[1].split("=");
                String[] sep = a[0].split("=");
                String betnumber = sep[1];
                String betamount= b[1];
                if (view != null) {
                    checkBox.setChecked(!checkBox.isChecked());
                    if(checkBox.isChecked()){
                        //sort number
                        final String sorted = betnumber.chars().sorted().mapToObj(c -> Character.valueOf((char)c).toString()).collect(Collectors.joining());
                        System.out.println(sorted);
                        //check if double digit
                        Boolean checker = doubleChecker(sorted);
                        if (checker == true){
                            Toast.makeText(getApplicationContext(),"DOUBLE DIGIT", LENGTH_SHORT).show();
                            int answer = Integer.parseInt(betamount) / 3;
                            tv3.setText(String.valueOf(answer));
                        }else{
                            Toast.makeText(getApplicationContext(),"NOT DOUBLE DIGIT", LENGTH_SHORT).show();
                            int answer;
                            if(yy.equals("")){
                                 answer = Integer.parseInt(betamount) / 6;
                                 tv3.setText(String.valueOf(answer));
                            }else{
                                answer = (Integer.parseInt(betamount) - Integer.parseInt(yy)) / 6;
                                tv3.setText(String.valueOf(answer));
                            }
                        }
                        //TODO save to array to send

                    }else{
                        //TODO mistake RETURN tv3 to old value
                    }
                }
            }catch (Exception e){
            }
        }
    });

Here's my adapter.

    class MyAdapter extends BaseAdapter {
    private ArrayList<HashMap<String, String>> mData;
    public MyAdapter(ArrayList<HashMap<String, String>> mData2) {
        this.mData = mData2;
    }
    @Override
    public int getCount() {
        return mData.size();
    }
    @Override
    public Object getItem(int i) {
        return this.mData.get(i);
    }
    @Override
    public long getItemId(int i) {
        return i;
    }
    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        view = getLayoutInflater().inflate(R.layout.row_layout, null);
        TextView tx_number = (TextView) view.findViewById(R.id.tx_number);
        TextView tx_amount = (TextView) view.findViewById(R.id.tx_amount);
        TextView tx_counter = (TextView) view.findViewById(R.id.tx_counter);
        String betid = mData.get(i).get("betid");
        if(betid!=null){
            String betnumber = mData.get(i).get("betnumber");
            String amountTarget = mData.get(i).get("amountTarget");
            String amountRamble = mData.get(i).get("amountRamble");
            tx_number.setText(betnumber);
            tx_amount.setText(amountTarget);
            tx_counter.setText(amountRamble);
        }
        return view;
    }
}




Aucun commentaire:

Enregistrer un commentaire