Дублировать флажок, когда отмечен, и значение строки исчезает - PullRequest
0 голосов
/ 08 июня 2019

У меня есть приложение, в котором есть просмотр списка, в котором отображаются значения, а при нажатии строки третье значение строки будет отображать значение.

Пример: третье значение равно 30, и когда оно нажато, оно должно быть делится на 6, поэтому ответ должен быть 5.

Но когда я прокручиваю и нажимаю строку в просмотре списка example: I pressed row1, в row10 появляется повторяющаяся проверенная строка, и значение third row возвращается к своему старому значению (30) for example.

Есть ли способ предотвратить дублирование флажка и сохранить значение строки при нажатии?

Вот мой код для адаптера:

    public 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 convertView, ViewGroup viewGroup) {
        View mView = convertView;

        String betid = mData.get(i).get("betid");

        ViewHolder holder ;

        if (mView == null) {
            Context context = viewGroup.getContext();
            LayoutInflater inflater = LayoutInflater.from(context);
            mView = inflater.inflate(R.layout.row_layout, null,false);
            holder = new ViewHolder();
            holder.tx_number = (TextView) mView.findViewById(R.id.tx_number);
            holder.tx_amount = (TextView) mView.findViewById(R.id.tx_amount);
            holder.tx_counter = (TextView) mView.findViewById(R.id.tx_counter);
            mView.setTag(holder);
        } else {
            holder = (ViewHolder) mView.getTag();
        }

        if (betid != null) {
            String betnumber = mData.get(i).get("betnumber");
            String amountTarget = mData.get(i).get("amountTarget");
            String amountRamble = mData.get(i).get("amountRamble");
            holder.tx_number.setText(betnumber);
            holder.tx_amount.setText(amountTarget);
            holder.tx_counter.setText(amountRamble);
        }
        return mView;
    }

    private class ViewHolder {
        TextView tx_number;
        TextView tx_amount;
        TextView tx_counter;
    }
}




        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();
                ArrayList<String> list = new ArrayList<String>();
                try {
                    String[] a = shitts.split(", ");
                    String[] b = a[1].split("=");
                    String[] sep = a[0].split("=");
                    String betnumber = sep[1];
                    String betamount= b[1];
                        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());
                            //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 // remove from array
                            tv3.setText("0");
                        }

                }catch (Exception e){
                }
            }
        });

1 Ответ

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

Я думаю, что проблема здесь

    if (betid != null) {
        String betnumber = mData.get(i).get("betnumber");
        String amountTarget = mData.get(i).get("amountTarget");
        String amountRamble = mData.get(i).get("amountRamble");
        holder.tx_number.setText(betnumber);
        holder.tx_amount.setText(amountTarget);
        holder.tx_counter.setText(amountRamble);
    } 

Вам не хватает оператора else для установки других значений, когда betid равно null. Если betid имеет значение null, другие строки могут содержать значения из предыдущих строк.

        ...
        holder.tx_amount.setText(amountTarget);
        holder.tx_counter.setText(amountRamble);
    } else {
        // assuming that if betid is null, then, TextViews should be cleared
        // or replace with your own values
        holder.tx_number.setText("");  
        holder.tx_amount.setText("");
        holder.tx_counter.setText("");
    } 
...