Android在TextWatcher中通知适配器

时间:2019-05-04 10:28:54

标签: android-recyclerview android-edittext

在我的应用中,每行都有RecyclerView和Edittext。我正在使用文本观察器从用户获取文本并在所有行中设置正确的值(取决于用户输入)。问题是,要使列表在每次输入后刷新,我需要调用notifyDataSetChanged()。这就引起了一个问题,即在将第一个数字放入edittext后,将通知适配器,edittext失去了焦点,因此基本上用户只能输入一个输入。您知道如何处理此问题吗?这是我的代码:

    public TextWatcher getUsernameData() {
            return new TextWatcher() {
                @Override
                public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                }
                @Override
                public void onTextChanged(CharSequence s, int start, int before, int count) {
                    // Here I'm doing calculations but after first input edit text 
loses focus because of notifying adapter

                }
                @Override
                public void afterTextChanged(Editable s) {

                }
            };
        }

如您所见,我正在onTextChanged()方法中进行计算。

1 个答案:

答案 0 :(得分:1)

您可以尝试保留对当前焦点所在的视图的引用,

然后在onBindViewHolder()中,您可以识别正在键入文本的视图,并再次请求对该视图进行聚焦,如下所示:

yourEditText.requestFocus();
InputMethodManager inputMethodManager = 
 (InputMethodManager) 
  getSystemService(Context.INPUT_METHOD_SERVICE);
inputMethodManager.showSoftInput(yourEditText, 
InputMethodManager.SHOW_IMPLICIT);

或者您也可以在设置适配器后保留对适配器中所有View的引用,然后不用循环使用notifyDataSetChanged()而是循环每个View并设置新数据,

但是您应该查看实施情况,我不知道您要实现的目标类似于过滤器/搜索