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