Android recyclerview屏幕外编辑文本值为空

Android recyclerview屏幕外编辑文本值为空,android,firebase,android-recyclerview,Android,Firebase,Android Recyclerview,我有一个包含编辑文本的recyclerview,用户在编辑文本中输入数字,当他单击“保存”按钮时,循环遍历所有recyclerview编辑文本并将数据保存到Firebase,我的问题是,如果有超过屏幕大小的数据列表,则忽略屏幕外的所有值,并保存它们的值作为空值,仅保存屏幕上显示的项目。她是我的代码 @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,

我有一个包含编辑文本的recyclerview,用户在编辑文本中输入数字,当他单击“保存”按钮时,循环遍历所有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);

    FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
    assert user != null;
    userid = user.getUid();
    usersDatabase = FirebaseDatabase.getInstance().getReference().child("users").child(userid);
    usersDatabase.keepSynced(true);
    usersDatabase.child("p").addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            if (dataSnapshot.getValue() != null) {

                p = (dataSnapshot.child("p").getValue()).toString();
                purchasesDatabase = usersDatabase.child("purchases").child("p").child(p).child("Cigarette");
            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });
    itemsDatabase = FirebaseDatabase.getInstance().getReference().child("users").child(userid).child("items").child("Cigarette");
    itemsDatabase.keepSynced(true);
    itemsDatabase.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            mItem.clear();
            for (DataSnapshot teacherSnapshot : dataSnapshot.getChildren()) {
                ItemsAdapter upload = teacherSnapshot.getValue(ItemsAdapter.class);
                upload.setKey(teacherSnapshot.getKey());
                mItem.add(upload);
            }
            mAdapter.notifyDataSetChanged();
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            Toast.makeText(getActivity(), databaseError.getMessage(), Toast.LENGTH_SHORT).show();
        }
    });

    fabItem = view.findViewById(R.id.fab_purchases_add_item);
    fabItem.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            addItem();

        }
    });


    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);-
              ------------------------------------- 
                i think my problem is her inside the dash box


                final EditText Qty = childView.findViewById(R.id.itemNewPcs);
                final String qty = Qty.getText().toString();

                    final Map<String, Object> note = new HashMap<>();
                    note.put(KEY_ITEMID, mylist.getItemID());
                    note.put(KEY_ITEMSQTY, qty);
                    note.put(KEY_ITEMNAME, mylist.getItemName());
                    usersDatabase.child("inventory").child("p").child(p).child("Cigarette")
                            .child(mylist.getItemID()).addListenerForSingleValueEvent(new ValueEventListener() {
                        @Override
                        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                            if (dataSnapshot.getValue() == null) {
                                dataSnapshot.getRef().updateChildren(note);
                            }
                        }

                        @Override
                        public void onCancelled(@NonNull DatabaseError databaseError) {
                        }
                    });
                }
@Nullable
@凌驾
创建视图时的公共视图(@NonNull LayoutInflater inflater、ViewGroup容器、Bundle savedInstanceState){
视图=充气机。充气(R.layout.purchases\u list\u活动,容器,false);
mItem=新的ArrayList();
mAdapter=newpurchasesadapter(getContext(),mItem,this);
re=view.findViewById(R.id.ItemsListView);
关于setLayoutManager(新的LinearLayoutManager(getActivity());
关于setAdapter(mAdapter);
FirebaseUser=FirebaseAuth.getInstance().getCurrentUser();
断言用户!=null;
userid=user.getUid();
usersDatabase=FirebaseDatabase.getInstance().getReference().child(“用户”).child(用户ID);
usersDatabase.keepSynced(true);
usersDatabase.child(“p”).addValueEventListener(新的ValueEventListener()){
@凌驾
public void onDataChange(@NonNull DataSnapshot DataSnapshot){
if(dataSnapshot.getValue()!=null){
p=(dataSnapshot.child(“p”).getValue()).toString();
purchasesDatabase=usersDatabase.child(“购买”).child(“p”).child(p”).child(“香烟”);
}
}
@凌驾
已取消的公共void(@NonNull DatabaseError DatabaseError){
}
});
itemsDatabase=FirebaseDatabase.getInstance().getReference().child(“用户”).child(用户ID).child(“项目”).child(“香烟”);
itemsDatabase.keepSynced(true);
itemsDatabase.addListenerForSingleValueEvent(新值EventListener()){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
斜接透明();
对于(DataSnapshot teacherSnapshot:DataSnapshot.getChildren()){
ItemsAdapter upload=teacherSnapshot.getValue(ItemsAdapter.class);
upload.setKey(teacherSnapshot.getKey());
添加(上传);
}
mAdapter.notifyDataSetChanged();
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
Toast.makeText(getActivity(),databaseError.getMessage(),Toast.LENGTH_SHORT).show();
}
});
fabItem=view.findViewById(R.id.fab\u采购\u添加项目);
fabItem.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
addItem();
}
});
fab=view.findviewbyd(R.id.fab_采购);
fab.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
对于(int i=0;i
使用RecyclerView时,屏幕外的视图会被回收(因此小部件的名称)到一个视图池中,并在新项目滚动到视图中时重新使用。您不应该在从视图中删除它们后再使用它们,因为您不知道它们附加到了什么数据项


如果您需要保留一整套视图,即使它们已从视图中滚动出去,也不要使用RecyclerView。只需将整个视图集合到一个ScrollView中,以便它们在视图滚动时始终在内存中。

但我需要使用RecyclerView获取其中的Firebase数据,然后保存输入的新数据Firebase的her是一个屏幕截图,左列是从Firebase获取的项目名称(使用recyclerview适配器绑定数据)右栏是用户应该输入的数量,当点击fab按钮时,我重复输入的数据。您没有义务将RecyclerView与Firebase查询一起使用。是否有其他方法不回收您可以建议的视图可以解决问题我没有将Firebase查询与RecyclerView一起使用顺便说一句,我没有问题对于firebase,我的问题是当我迭代抛出recyclerview并从中获取输入的数据时