Как мы можем хранить редактируемые значения текста в hashmap onTextChangedListner - PullRequest
0 голосов
/ 12 ноября 2018

Я использую расширяемый список, где каждый дочерний макет имеет один текст для редактирования. Я запускаю setOnFocusChangeListener для каждого из текстовых полей, чтобы предотвратить потерю данных.

Но я заметил, что введенный мною текст сохраняется в хэш-карте только при следующем перемещении курсора редактирования текста. Но мне нужно сохранять введенный текст при наборе текста, что-то вроде onKeyUp .

Примечание: Я также пробовал текстовые наблюдатели, но он не работает должным образом

Код

public Map<String, String> mapping = new HashMap<>();

@Override
public View getChildView(final int i, final int i1, boolean b, View view, ViewGroup viewGroup) {

 ViewHolder holder;

 Map<String, String> item = (Map<String, String>) getChild(i, i1);
 String key = item.get("item_code");

 if (view == null) {
        holder = new ViewHolder();
        holder.editText = view.findViewById(R.id.txtRecordComment);
        view.setTag(holder);
 } else {
        holder = (ViewHolder) view.getTag();
 }


 holder.editText.setText(mapping.get(key));

 /*
 holder.editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View view, boolean hasFocus) {
            if (!hasFocus) {
                mapping.put(key, holder.editText.getText().toString());
            }
        }
    }); 
   */


   holder.editText.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

        }

        @Override
        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
                   mapping.put(key, holder.editText.getText().toString());
        }

        @Override
        public void afterTextChanged(Editable editable) {

        }
    });


    return view;
}

private class ViewHolder {
    protected EditText editText;
}

Проблема с приведенным выше кодом заключается в том, что если я ввожу текст в текстовое поле parent1, этот же текст дублируется в любом из текстовых полей parent2.

Будет очень полезно, если кто-нибудь подскажет мне, как мне этого добиться.

1 Ответ

0 голосов
/ 12 ноября 2018
    @Override
    public View getChildView(final int viewPosition, final int i1, boolean b, View view, ViewGroup viewGroup) {

     ViewHolder holder;

     Map<String, String> item = (Map<String, String>) getChild(i, i1);
     String key = item.get("item_code");

   //  if (view == null) {
            holder = new ViewHolder();
            holder.editText = view.findViewById(R.id.txtRecordComment);
  //          view.setTag(holder);
   //  } else {
   //         holder = (ViewHolder) view.getTag();
   //  }


     holder.editText.setText(mapping.get(viewPosition));

     /*
     holder.editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View view, boolean hasFocus) {
                if (!hasFocus) {
                    mapping.put(viewPosition, holder.editText.getText().toString());
                }
            }
        }); 
       */


       holder.editText.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
                       mapping.put(viewPosition, holder.editText.getText().toString());
            }

            @Override
            public void afterTextChanged(Editable editable) {

            }
        });


        return view;
    }

    private class ViewHolder {
        protected EditText editText;
    }
...