recyclerview在特定活动的片段之间切换后消失

k4ymrczo  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(287)

我在开发过程中遇到的问题是,在我的片段中有一个recyclerview,当我在一个特定活动的两个片段之间切换之后,它就消失了。第一次加载碎片时,一切正常,但后来我不明白出了什么问题。我试着引用人们在github上发布的各种方式,比如notifydatasetchanged,等等,但似乎什么都不起作用。如果有人能帮我解决这个问题,我将不胜感激。这是我的课程。
profilefragment.java文件:

public class ProfileFragment extends Fragment {

    FirebaseAuth firebaseAuth;
    FirebaseUser user;
    FirebaseDatabase firebaseDatabase;
    DatabaseReference databaseReference;

    StorageReference storageReference;
    RecyclerView itemRecycler;
    List<ModelProfile> modelProfiles;
    AdapterProfile adapterProfile;

    String storagePath= "Users_Profile_Cover_Image/-";

    ImageView avatarIv,dp;
    CardView card,cardArrow;
    TextView nameTv, emailTv, phoneTv;
    Button logout,update;
    ExtendedFloatingActionButton fab;

    ProgressDialog pd;
//..

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        final View view= inflater.inflate(R.layout.fragment_profile, container, false);

        firebaseAuth = FirebaseAuth.getInstance();
        user= firebaseAuth.getCurrentUser();
        firebaseDatabase = FirebaseDatabase.getInstance();
        databaseReference = firebaseDatabase.getReference("Users");
        storageReference= getInstance().getReference();

        loadItems();

        return view;
    }

    private void loadItems() {
        //Problem could be here
        GridLayoutManager layoutManager= new GridLayoutManager(getContext(),3);
        itemRecycler.setHasFixedSize(true);
        itemRecycler.setLayoutManager(layoutManager);
        itemRecycler.setVisibility(View.VISIBLE);
        CollectionReference ref =FirebaseFirestore.getInstance().collection("All_Posts");
        com.google.firebase.firestore.Query query = ref.whereEqualTo("uid",uid);
        FirestoreRecyclerOptions<ModelProfile> options = new FirestoreRecyclerOptions.Builder<ModelProfile>()
                .setQuery(query,ModelProfile.class).build();
        adapterProfile = new AdapterProfile(options,getActivity());
        itemRecycler.setAdapter(adapterProfile);
        adapterProfile.startListening();
        query.addSnapshotListener(new EventListener<QuerySnapshot>() {
            @Override
            public void onEvent(@Nullable QuerySnapshot value,
                                @Nullable FirebaseFirestoreException e) {
                if (e != null) {
                    return;
                }

                assert value != null;
                Log.i("Size",String.valueOf(value.getDocuments().size()));
                if (value.getDocuments().size() > 0) { // List is populated
                    card.setVisibility(View.GONE);
                        cardArrow.setVisibility(View.GONE);
                } else { // List is empty
                        card.setVisibility(View.VISIBLE);
                        cardArrow.setVisibility(View.VISIBLE);
                }
            }
        });
    }

//
//    @Override
//    public void onStart() {
//        super.onStart();
//        adapterProfile.startListening();
//    }
//
//
//
//    @Override
//    public void onStop() {
//        super.onStop();
//        adapterProfile.stopListening();
//    }

    @Override
    public void onResume() {
        super.onResume();
        adapterProfile.startListening();
    }
}

adapter:-

public class AdapterProfile extends FirestoreRecyclerAdapter<ModelProfile,AdapterProfile.MyHolder> {
    Context context;
    public String im;
    public AdapterProfile(@NonNull FirestoreRecyclerOptions<ModelProfile> options, Activity Context) {
        super(options);
        context = Context;
    }

    @Override
    protected void onBindViewHolder(@NonNull MyHolder holder, int position, @NonNull ModelProfile model) {
        String uid = model.getUid();
        String uEmail =model.getuEmail();
    }

    @NonNull
    @Override
    public MyHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
//..
    }

    class MyHolder extends RecyclerView.ViewHolder{
//..
}

片段转换发生的活动

public class LandingActivity extends AppCompatActivity {

    FirebaseAuth firebaseAuth;
    DatabaseReference userDbRef;
    FirebaseUser user;

    String uid,dp;

    ChipNavigationBar chipNavigationBar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_landing);

        getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,new InventoryFragment()).commit();
        bottomMenu();
    }

    private void bottomMenu() {
        chipNavigationBar.setOnItemSelectedListener(new ChipNavigationBar.OnItemSelectedListener() {
            //problem could be here as well.........
            @Override
            public void onItemSelected(int i) {
                Fragment fragment=null;
                switch(i) {
                    case R.id.bottom_nav_2:
                    fragment = new CltFragment();
                    break;
                case R.id.bottom_nav_3:
                    fragment = new MaceFragment();
                    break;
                    case R.id.bottom_nav_profile:
                        fragment = new ProfileFragment();
                        break;
                }
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,fragment).commit();

            }
        });
    }

    private void checkUserStatus()
    {
        FirebaseUser user= firebaseAuth.getCurrentUser();
        if(user !=null)
        {
            uid=user.getUid();
        }
        else
        {
            startActivity(new Intent(LandingActivity.this,MainActivity.class));
            finish();
        }
    }
    @Override
    public void onResume() {
        //Problem could be here
        super.onResume();
        Intent intent = getIntent();
        String frag = "";
        if(intent.hasExtra("frag")) {
             frag = intent.getExtras().getString("frag");
        }
        else
        {
            //..
        }
        switch(frag)
        {
            //..
            case "ProfileFragment":
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new ProfileFragment()).commit();
                chipNavigationBar.setItemSelected(R.id.bottom_nav_profile,true);
                break;
        }
    }
}

谢谢你看了我的问题!

jvidinwx

jvidinwx1#

试着用这个

getSupportFragmentManager().beginTransaction().add(R.id.fragment_container,new InventoryFragment()).commit();

而不是这个

getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,new InventoryFragment()).commit();

相关问题