在 Edittext 文本更改时更新 recyclerview
Update recyclerview on Edittext text change
我在片段下方有一个 Edittext 和一个 recyclerview。 recyclerview 行项目有一个文本视图。我已经设置了适配器,一切正常。我想用 edittext 中的文本更改 recyclerview 的每个项目,但不知何故它不起作用。我尝试在 getListForRv() 方法上使用 itemArrayAdapter.notifyDataSetChanged()。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_fonts, container, false);
itemList = new ArrayList<FontItem>();
EditText editText = view.findViewById(R.id.edit_text);
itemArrayAdapter = new ItemArrayAdapter(R.layout.recyclerview_item, itemList);
recyclerView = (RecyclerView) view.findViewById(R.id.font_list);
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.setAdapter(itemArrayAdapter);
getListForRv(10);
editText.addTextChangedListener(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) {
getListForRv(90);
}
@Override
public void afterTextChanged(Editable s) {
getListForRv(90);
}
});
return view;
}
private void getListForRv(int k) {
for (int i = k; i < 1000; i++) {
itemList.add(new FontItem("Item " + i));
}
itemArrayAdapter.notifyDataSetChanged();
}
调用您的 getListForRv()
编辑文本 afterTextChanged
方法。
notifyDataSetChanged
会刷新所有itemview
,如果要同步所有edittext
我有两个解决方案:
- 数据绑定:您可以使用 ObservableField
- 创建一个侦听器并确保所有项目都保持侦听器,当编辑文本更改时,调用侦听器然后所有项目视图都会接受更改
最后我通过执行以下操作设法解决了这个问题,不知道这是否是一种不好的做法但对我有用:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_fonts, container, false);
itemList = new ArrayList<FontItem>();
EditText editText = getActivity().findViewById(R.id.edit_text);
itemArrayAdapter = new ItemArrayAdapter(R.layout.recyclerview_item, itemList);
recyclerView = (RecyclerView) view.findViewById(R.id.font_list);
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.setAdapter(itemArrayAdapter);
getListForRv(10);
editText.addTextChangedListener(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) {
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.setAdapter(itemArrayAdapter);
getListForRv(90);
itemArrayAdapter.notifyDataSetChanged();
}
@Override
public void afterTextChanged(Editable s) {
}
});
return view;
}
private void getListForRv(int k) {
if (!itemList.isEmpty())
itemList.clear();
for (int i = k; i < 1000; i++) {
itemList.add(new FontItem("Item " + i));
}
}
我在片段下方有一个 Edittext 和一个 recyclerview。 recyclerview 行项目有一个文本视图。我已经设置了适配器,一切正常。我想用 edittext 中的文本更改 recyclerview 的每个项目,但不知何故它不起作用。我尝试在 getListForRv() 方法上使用 itemArrayAdapter.notifyDataSetChanged()。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_fonts, container, false);
itemList = new ArrayList<FontItem>();
EditText editText = view.findViewById(R.id.edit_text);
itemArrayAdapter = new ItemArrayAdapter(R.layout.recyclerview_item, itemList);
recyclerView = (RecyclerView) view.findViewById(R.id.font_list);
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.setAdapter(itemArrayAdapter);
getListForRv(10);
editText.addTextChangedListener(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) {
getListForRv(90);
}
@Override
public void afterTextChanged(Editable s) {
getListForRv(90);
}
});
return view;
}
private void getListForRv(int k) {
for (int i = k; i < 1000; i++) {
itemList.add(new FontItem("Item " + i));
}
itemArrayAdapter.notifyDataSetChanged();
}
调用您的 getListForRv()
编辑文本 afterTextChanged
方法。
notifyDataSetChanged
会刷新所有itemview
,如果要同步所有edittext
我有两个解决方案:
- 数据绑定:您可以使用 ObservableField
- 创建一个侦听器并确保所有项目都保持侦听器,当编辑文本更改时,调用侦听器然后所有项目视图都会接受更改
最后我通过执行以下操作设法解决了这个问题,不知道这是否是一种不好的做法但对我有用:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_fonts, container, false);
itemList = new ArrayList<FontItem>();
EditText editText = getActivity().findViewById(R.id.edit_text);
itemArrayAdapter = new ItemArrayAdapter(R.layout.recyclerview_item, itemList);
recyclerView = (RecyclerView) view.findViewById(R.id.font_list);
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.setAdapter(itemArrayAdapter);
getListForRv(10);
editText.addTextChangedListener(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) {
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.setAdapter(itemArrayAdapter);
getListForRv(90);
itemArrayAdapter.notifyDataSetChanged();
}
@Override
public void afterTextChanged(Editable s) {
}
});
return view;
}
private void getListForRv(int k) {
if (!itemList.isEmpty())
itemList.clear();
for (int i = k; i < 1000; i++) {
itemList.add(new FontItem("Item " + i));
}
}