使用RecyclerView,将回收屏幕外的EditText。例如,如果我们有一个200个项目的列表,并且一次显示2个项目,那么我们将永远只有2个EditText。他们会将较高的EditText重用于较低的元素。
例如,这是一个包含EditText的列表,该列表一次仅显示2,并且随着用户滚动,它将回收并重新使用它们。
这意味着我们以后不能再遍历所有元素并获取值,因为它们不存储其值。
所以,我要问的是,无论如何都可以循环访问所有项目,并获得价值,甚至回收的价值,并将其保存到Firebase中
编辑: 我有一个带有编辑文本的recyclerview,用户在编辑文本内输入数字,当他单击“保存”按钮时,一个for循环遍历所有recyclerview编辑文本并将数据保存到Firebase
这是我的片段类
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.purchases_list_activity, container, false);
mItem = new ArrayList<>();
mAdapter = new PurchasesAdapter(getContext(), mItem, this);
re = view.findViewById(R.id.itemsPListView);
re.setLayoutManager(new LinearLayoutManager(getActivity()));
re.setAdapter(mAdapter);
fab = view.findViewById(R.id.fab_purchases);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
for (int i = 0; i < mItem.size(); i++) {
final ItemsAdapter mylist = mItem.get(i);
View childView = re.getChildAt(i);
final EditText Qty = childView.findViewById(R.id.itemNewPcs);
final String qty = Qty.getText().toString();
Toast.makeText(getContext(),qty+"",Toast.LENGTH_LONG).show();
..
}
答案 0 :(得分:0)
我认为您可能需要RecyclerView
的{{1}}功能。基本上,您实现自己的类,该类实现OnChildAttachStateChangeListener
接口。具体来说,实施onChildViewAttachedToWindow
方法可以保存到Firebase或添加到可以稍后添加到Firebase的列表中-基本上满足您的任何需求。您只需通过addOnChildAttachStateChangeListener()
方法附加自定义监听器即可。
希望有帮助。