在我的应用中,每行都有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()方法中进行计算。
答案 0 :(得分:1)
您可以尝试保留对当前焦点所在的视图的引用,
然后在onBindViewHolder()中,您可以识别正在键入文本的视图,并再次请求对该视图进行聚焦,如下所示:
yourEditText.requestFocus();
InputMethodManager inputMethodManager =
(InputMethodManager)
getSystemService(Context.INPUT_METHOD_SERVICE);
inputMethodManager.showSoftInput(yourEditText,
InputMethodManager.SHOW_IMPLICIT);
或者您也可以在设置适配器后保留对适配器中所有View的引用,然后不用循环使用notifyDataSetChanged()而是循环每个View并设置新数据,
但是您应该查看实施情况,我不知道您要实现的目标类似于过滤器/搜索