再次打开片段时 Recyclerview 变空
Recycler View gets empty when the fragment s opened again
我在片段中有一个回收视图
当我按返回键转到上一个 activity 然后返回时,回收器视图变空了
我试着把 adapter.startListening();到 onStart()
还尝试将 stopListening() 放到 onStop()
当我第一次进入片段或关闭应用程序并再次打开它时,回收器视图内容显示,但是当我按下后退按钮并再次返回片段时,回收器视图的所有内容都得到了空
这是我的代码:
public class EnrolledAboutEditFragment extends Fragment {
private FirebaseAuth mAuth;
private String mCurrentUserId;
private DatabaseReference mRootRef;
private RecyclerView mRecycler;
FirebaseRecyclerOptions<ModelAboutEnrolled> options;
FirebaseRecyclerAdapter<ModelAboutEnrolled, ViewHolderAboutEnrolled> adapter;
public EnrolledAboutEditFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, final ViewGroup container,
Bundle savedInstanceState) {
mAuth = FirebaseAuth.getInstance();
mCurrentUserId = mAuth.getCurrentUser().getUid();
mRootRef = FirebaseDatabase.getInstance().getReference();
mRootRef.keepSynced(true);
mView = inflater.inflate(R.layout.fragment_enrolled_about_edit,container,false);
mRecycler = mView.findViewById(R.id.f_about_recycler_view);
mRecycler.setHasFixedSize(true);
mRootRef.child("Users").child(mCurrentUserId).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
String username = dataSnapshot.child("username").getValue().toString();
adapterFunction();
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) { }
});
}
public void adapterFunction(){
DatabaseReference reference = mRootRef.child("Contents").child(username);
options = new FirebaseRecyclerOptions.Builder<ModelAboutEnrolled>()
.setQuery(reference,ModelAboutEnrolled.class).build();
adapter = new FirebaseRecyclerAdapter<ModelAboutEnrolled, ViewHolderAboutEnrolled>(options) {
@Override
protected void onBindViewHolder(@NonNull final ViewHolderAboutEnrolled holder, int position, @NonNull final ModelAboutEnrolled model) {
Picasso.get().load(model.getImage()).into(holder.image);
}
@NonNull
@Override
public ViewHolderAboutEnrolled onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_about_enrolled,parent,false);
return new ViewHolderAboutEnrolled(view);
}
};
LinearLayoutManager llm = new LinearLayoutManager(getContext(), LinearLayoutManager.HORIZONTAL, false);
mRecycler.setLayoutManager(llm);
adapter.startListening();
mRecycler.setAdapter(adapter);
}
}
删除您的 setHasFixedSize() 方法。
我在片段中有一个回收视图 当我按返回键转到上一个 activity 然后返回时,回收器视图变空了
我试着把 adapter.startListening();到 onStart() 还尝试将 stopListening() 放到 onStop()
当我第一次进入片段或关闭应用程序并再次打开它时,回收器视图内容显示,但是当我按下后退按钮并再次返回片段时,回收器视图的所有内容都得到了空
这是我的代码:
public class EnrolledAboutEditFragment extends Fragment {
private FirebaseAuth mAuth;
private String mCurrentUserId;
private DatabaseReference mRootRef;
private RecyclerView mRecycler;
FirebaseRecyclerOptions<ModelAboutEnrolled> options;
FirebaseRecyclerAdapter<ModelAboutEnrolled, ViewHolderAboutEnrolled> adapter;
public EnrolledAboutEditFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, final ViewGroup container,
Bundle savedInstanceState) {
mAuth = FirebaseAuth.getInstance();
mCurrentUserId = mAuth.getCurrentUser().getUid();
mRootRef = FirebaseDatabase.getInstance().getReference();
mRootRef.keepSynced(true);
mView = inflater.inflate(R.layout.fragment_enrolled_about_edit,container,false);
mRecycler = mView.findViewById(R.id.f_about_recycler_view);
mRecycler.setHasFixedSize(true);
mRootRef.child("Users").child(mCurrentUserId).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
String username = dataSnapshot.child("username").getValue().toString();
adapterFunction();
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) { }
});
}
public void adapterFunction(){
DatabaseReference reference = mRootRef.child("Contents").child(username);
options = new FirebaseRecyclerOptions.Builder<ModelAboutEnrolled>()
.setQuery(reference,ModelAboutEnrolled.class).build();
adapter = new FirebaseRecyclerAdapter<ModelAboutEnrolled, ViewHolderAboutEnrolled>(options) {
@Override
protected void onBindViewHolder(@NonNull final ViewHolderAboutEnrolled holder, int position, @NonNull final ModelAboutEnrolled model) {
Picasso.get().load(model.getImage()).into(holder.image);
}
@NonNull
@Override
public ViewHolderAboutEnrolled onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_about_enrolled,parent,false);
return new ViewHolderAboutEnrolled(view);
}
};
LinearLayoutManager llm = new LinearLayoutManager(getContext(), LinearLayoutManager.HORIZONTAL, false);
mRecycler.setLayoutManager(llm);
adapter.startListening();
mRecycler.setAdapter(adapter);
}
}
删除您的 setHasFixedSize() 方法。