【问题标题】:RecyclerView disappearing after switching between fragments on a particular ActivityRecyclerView 在特定 Activity 的片段之间切换后消失
【发布时间】:2021-03-19 23:20:10
【问题描述】:

我在开发过程中遇到的问题是我的片段中有一个回收视图,当我在特定活动的两个片段之间切换后它消失了。第一次加载片段时一切正常,但之后我不明白出了什么问题。我曾尝试参考人们在 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();
    }
} 

适配器:-

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{
//..
}

进行片段切换的Activity

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;
        }
    }
}

感谢您查看我的问题!

【问题讨论】:

  • 如果您遇到问题,最好在发布问题时创建MCVE。您为此问题发布了近 650 行代码。人们需要解析和尝试在线调试的内容很多。请编辑您的问题并隔离问题,这样可以增加获得帮助的机会。
  • @AlexMamo 感谢您的建议。我已经相应地编辑了我的问题。
  • 尝试删除 onResume() 方法。
  • 也试过了...也没有帮助

标签: java android firebase android-fragments google-cloud-firestore


【解决方案1】:

试试这个

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

不是这个

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

【讨论】:

  • 感谢您的回复。欣赏它。我试过上面的方法。它仍然导致上述相同的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多