Android RecyclerView在从firebase到fragment检索数据时不稳定
我有一个应用程序,它使用firebase作为后端,并在RecyclerView中显示数据。发生的情况是,当我将数据保存到firebase时,它没有以正确的方式在RecyclerView中显示数据。一些数据是空的,但当我旋转屏幕时,所有数据都显示出来 这是我的片段类Android RecyclerView在从firebase到fragment检索数据时不稳定,android,firebase,android-fragments,android-recyclerview,Android,Firebase,Android Fragments,Android Recyclerview,我有一个应用程序,它使用firebase作为后端,并在RecyclerView中显示数据。发生的情况是,当我将数据保存到firebase时,它没有以正确的方式在RecyclerView中显示数据。一些数据是空的,但当我旋转屏幕时,所有数据都显示出来 这是我的片段类 public类AddNewItemFragment扩展了片段{ public AddNewItemFragment(){ } 回收站; FirebaseRecyclerAdapter适配器; 进展性帕金森病; 字符串userid=“”
public类AddNewItemFragment扩展了片段{
public AddNewItemFragment(){
}
回收站;
FirebaseRecyclerAdapter适配器;
进展性帕金森病;
字符串userid=“”;
EditText textViewItemName;
编辑文本文本视图项目PC;
编辑文本文本查看项目价格;
EditText-textViewBoxCost;
数据库参考项数据库;
浮动操作按钮;
按钮项savebtn;
私有静态最终字符串键\u ITEMNAME=“ITEMNAME”;
私有静态最终字符串密钥\u ITEMSPCS=“itemPcs”;
私有静态最终字符串键\u PSSALEPRICE=“itempsaleprice”;
私有静态最终字符串键_-BOXCOST=“itemBoxCost”;
私有静态最终字符串键\u ItemCat=“ItemCat”;
公众观点;
字符串选项卡文本;
@可空
@凌驾
创建视图时的公共视图(@NonNull LayoutInflater inflater、@Nullable ViewGroup container、@Nullable Bundle savedInstanceState){
视图=充气机。充气(R.layout.add\u new\u item\u活动,容器,false);
//如果(getArguments()!=null){
//tabText=getArguments().getString(“itemCat”);
//}其他{
//tabText=“香烟”;
// }
textViewItemName=view.findViewById(R.id.edittextItemsName);
textViewItemPcs=view.findViewById(R.id.edittextItemsPcs);
textViewItemPssalePrice=view.findViewById(R.id.edittextItemsPsSalePrice);
textViewBoxCost=view.findViewById(R.id.edittextItemsBoxCost);
re=view.findViewById(R.id.itemsListView);
关于setLayoutManager(新的LinearLayoutManager(getContext());
FirebaseUser=FirebaseAuth.getInstance().getCurrentUser();
userid=user.getUid();
itemsDatabase=FirebaseDatabase.getInstance().getReference().child(“用户”).child(用户ID).child(“项目”);
fab=view.findviewbyd(R.id.fab);
fab.setOnClickListener(新视图.OnClickListener()
{
@凌驾
公共void onClick(视图v){
saveNote();
}
});
返回视图;
}
@凌驾
已创建公用void onview(@NonNull视图,@Nullable Bundle savedInstanceState){
super.onViewCreated(视图,savedInstanceState);
}
@凌驾
public void onStart(){
super.onStart();
FirebaseRecyclerOptions选项=
新的FirebaseRecyclerOptions.Builder()
.setQuery(itemsDatabase,Note1.class)
.build();
适配器=新的FirebaseRecyclerAdapter(选项){
@凌驾
受保护的无效onBindViewHolder(@NonNull final NoteHolder,final int position,@NonNull final Note1 model){
字符串ItemsID=getRef(位置).getKey();
if(ItemsID!=null){
itemsDatabase.child(ItemsID).addValueEventListener(新的ValueEventListener(){
@凌驾
public void onDataChange(@NonNull DataSnapshot DataSnapshot){
if(dataSnapshot.exists()){
字符串itemName=(dataSnapshot.child(“itemName”).getValue()).toString();
字符串itemPcs=(dataSnapshot.child(“itemPcs”).getValue()).toString();
字符串itempsaleprice=(dataSnapshot.child(“itempsaleprice”).getValue()).toString();
字符串boxCost=(dataSnapshot.child(“itemBoxCost”).getValue()).toString();
holder.textViewItemName.setText(itemName);
holder.textViewItemPcs.setText(itemPcs);
holder.textViewItemsSalePrice.setText(ItemsSalePrice);
holder.textViewBoxCost.setText(boxCost);
}
}
@凌驾
已取消的公共void(@NonNull DatabaseError DatabaseError){
}
});
}
}
@非空
@凌驾
public NoteHolder onCreateViewHolder(@NonNull ViewGroup父级,int viewType){
视图v=LayoutInflater.from(parent.getContext()).flate(R.layout.add\u item\u design\u适配器,parent,false);
返还新票据持有人(v);
}
};
关于设置适配器(适配器);
adapter.startListening();
}
私有void setProgressStatus(){
pd=新建进度对话框(getActivity());
//设置进度对话框样式微调器
pd.setProgressStyle(ProgressDialog.STYLE_微调器);
//设置进度对话框标题和消息
pd.setTitle(“请等待Feras!!!”;
pd.设置消息(“加载…”);
//设置进度对话框的背景色
Objects.requirennoull(pd.getWindow()).setBackgroundDrawable(新的ColorDrawable(Color.WHITE));
pd.可设置可取消(假);
//最后,显示进度对话框
pd.show();
}
私有void saveNote(){
itemsDatabase=FirebaseDatabase.getInstance().getReference();
String itemName=textViewItemName.getText().toString();
字符串itemPcs=textViewItemPcs.getText().toString();
String itempsaleprice=textViewitempsaleprice.getText().toString();
String itemBoxCost=textViewBoxCost.getText().toString();
if(itemName.trim().isEmpty()| | itemPcs.trim().isEmpty())||
itemPsSalePrice.trim().isEmpty()| | itemBoxCost.trim().isEmpty()){
Toast.makeText(getActivity(),“请输入所有信息”,Toast.LENGTH_SHORT.show();
回来
}
Map note=newhashmap();
注:put(键\项目名称,项目名称);
public class AddNewItemFragment extends Fragment {
public AddNewItemFragment() {
}
RecyclerView re;
FirebaseRecyclerAdapter<Note1, NoteHolder> adapter;
ProgressDialog pd;
String userid = "";
EditText textViewItemName;
EditText textViewItemPcs;
EditText textViewItemPssalePrice;
EditText textViewBoxCost;
DatabaseReference itemsDatabase;
FloatingActionButton fab;
Button itemSaveBtn;
private static final String KEY_ITEMNAME = "itemName";
private static final String KEY_ITEMSPCS = "itemPcs";
private static final String KEY_PSSALEPRICE = "itemPsSalePrice";
private static final String KEY_BOXCOST = "itemBoxCost";
private static final String KEY_ItemCat = "itemCat";
public View view;
String tabText;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
view = inflater.inflate(R.layout.add_new_item_activity, container, false);
// if (getArguments() != null) {
// tabText = getArguments().getString("itemCat");
// } else {
// tabText = "CIGARETTE";
// }
textViewItemName = view.findViewById(R.id.edittextItemsName);
textViewItemPcs = view.findViewById(R.id.edittextItemsPcs);
textViewItemPssalePrice = view.findViewById(R.id.edittextItemsPsSalePrice);
textViewBoxCost = view.findViewById(R.id.edittextItemsBoxCost);
re = view.findViewById(R.id.itemsListView);
re.setLayoutManager(new LinearLayoutManager(getContext()));
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
userid = user.getUid();
itemsDatabase = FirebaseDatabase.getInstance().getReference().child("users").child(userid).child("items");
fab = view.findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v) {
saveNote();
}
});
return view;
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
}
@Override
public void onStart() {
super.onStart();
FirebaseRecyclerOptions<Note1> options =
new FirebaseRecyclerOptions.Builder<Note1>()
.setQuery(itemsDatabase, Note1.class)
.build();
adapter = new FirebaseRecyclerAdapter<Note1, NoteHolder>(options) {
@Override
protected void onBindViewHolder(@NonNull final NoteHolder holder, final int position, @NonNull final Note1 model) {
String ItemsID = getRef(position).getKey();
if (ItemsID != null) {
itemsDatabase.child(ItemsID).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
String itemName = (dataSnapshot.child("itemName").getValue()).toString();
String itemPcs = (dataSnapshot.child("itemPcs").getValue()).toString();
String itemPsSalePrice = (dataSnapshot.child("itemPsSalePrice").getValue()).toString();
String boxCost = (dataSnapshot.child("itemBoxCost").getValue()).toString();
holder.textViewItemName.setText(itemName);
holder.textViewItemPcs.setText(itemPcs);
holder.textViewItemPssalePrice.setText(itemPsSalePrice);
holder.textViewBoxCost.setText(boxCost);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
}
@NonNull
@Override
public NoteHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.add_item_design_adapter, parent, false);
return new NoteHolder(v);
}
};
re.setAdapter(adapter);
adapter.startListening();
}
private void setProgressStatus() {
pd = new ProgressDialog(getActivity());
// Set progress dialog style spinner
pd.setProgressStyle(ProgressDialog.STYLE_SPINNER);
// Set the progress dialog title and message
pd.setTitle("Please Wait Feras!!!!!.");
pd.setMessage("Loading.........");
// Set the progress dialog background color
Objects.requireNonNull(pd.getWindow()).setBackgroundDrawable(new ColorDrawable(Color.WHITE));
pd.setCancelable(false);
// Finally, show the progress dialog
pd.show();
}
private void saveNote() {
itemsDatabase = FirebaseDatabase.getInstance().getReference();
String itemName = textViewItemName.getText().toString();
String itemPcs = textViewItemPcs.getText().toString();
String itemPsSalePrice = textViewItemPssalePrice.getText().toString();
String itemBoxCost = textViewBoxCost.getText().toString();
if (itemName.trim().isEmpty() || itemPcs.trim().isEmpty() ||
itemPsSalePrice.trim().isEmpty() || itemBoxCost.trim().isEmpty()) {
Toast.makeText(getActivity(), "Please enter all information", Toast.LENGTH_SHORT).show();
return;
}
Map<String, Object> note = new HashMap<>();
note.put(KEY_ITEMNAME, itemName);
note.put(KEY_ITEMSPCS, itemPcs);
note.put(KEY_PSSALEPRICE, itemPsSalePrice);
note.put(KEY_BOXCOST, itemBoxCost);
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
if (user != null) {
userid = user.getUid();
}
String key = itemsDatabase.push().getKey();
itemsDatabase.child("users").child(userid).child("items").child(key).setValue(note);
}
public static class NoteHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
private OnItemClickListener mListener;
TextView textViewItemName;
TextView textViewItemPcs;
TextView textViewItemPssalePrice;
TextView textViewBoxCost;
NoteHolder(View itemView) {
super(itemView);
textViewItemName = itemView.findViewById(R.id.itemName);
textViewItemPcs = itemView.findViewById(R.id.itemPcs);
textViewItemPssalePrice = itemView.findViewById(R.id.itemPs);
textViewBoxCost = itemView.findViewById(R.id.itemBoxCost);
itemView.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if (mListener != null) {
int position = getAdapterPosition();
if (position != RecyclerView.NO_POSITION) {
mListener.onItemClick(position);
}
}
}
public interface OnItemClickListener {
void onItemClick(int position);
void onShowItemClick(int position);
void onDeleteItemClick(int position);
}
public void setOnItemClickListener(OnItemClickListener listener) {
mListener = listener;
}
}