首页 > 解决方案 > 我们如何将编辑文本值存储在 hashmap onTextChangedListner 中

问题描述

我正在使用可扩展列表视图,其中每个子布局都有一个编辑文本。我正在为每个文本框触发setOnFocusChangeListener以防止数据丢失。

但我观察到,我输入的文本仅在编辑文本光标接下来移动时才存储到哈希图中。但是我需要在键入时存储输入的文本,例如onKeyUp

注意:我也尝试过 Text Watchers 但它没有按预期工作

代码

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 的 textbox1 中输入文本,那么在 parent2 的任何一个文本框中都会复制相同的文本。

如果有人建议我如何实现这一点,那将是很大的帮助。

标签: androidandroid-edittextexpandablelistview

解决方案


    @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;
    }

推荐阅读