Android 视图寻呼机片段应加载1次,以显示来自firebase的数据(异步任务)

Android 视图寻呼机片段应加载1次,以显示来自firebase的数据(异步任务),android,firebase,android-fragments,android-asynctask,Android,Firebase,Android Fragments,Android Asynctask,我有一个带有ViewPager的表格,其中包含3个片段。片段1和片段2进行得非常顺利,但在片段3中,我遇到了问题,因为我应该重新加载1次(打开应用程序-滑动到碎片3[仍然为空]-滑动到碎片1-滑动到碎片3-它只是显示数据) 我认为这个问题是由异步任务引起的,但我不知道如何解决这个问题。请帮帮我 ThreeFragment.java 包com.example.yehezkiel.eclassapp public ThreeFragment() { // Required e

我有一个带有ViewPager的表格,其中包含3个片段。片段1和片段2进行得非常顺利,但在片段3中,我遇到了问题,因为我应该重新加载1次(打开应用程序-滑动到碎片3[仍然为空]-滑动到碎片1-滑动到碎片3-它只是显示数据)

我认为这个问题是由异步任务引起的,但我不知道如何解决这个问题。请帮帮我

ThreeFragment.java 包com.example.yehezkiel.eclassapp

    public ThreeFragment() {
        // Required empty public constructor
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);


    }




    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        v =  inflater.inflate(R.layout.fragment_three, container, false);

        userRef = FirebaseDatabase.getInstance().getReference("users");
        users = FirebaseAuth.getInstance().getCurrentUser();
        mataKuliahRef = FirebaseDatabase.getInstance().getReference("courses");
        daftarPengumumanRef = FirebaseDatabase.getInstance().getReference("pengumuman");

        mAuth = FirebaseAuth.getInstance();

        mRecyclerView = (RecyclerView) v.findViewById(R.id.PengumumanRView);
        mRecyclerView.setHasFixedSize(true);

        adapter = new PengumumanAdapter(getActivity().getApplicationContext(), consolidatedList);
        LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity().getApplicationContext());
        layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
        mRecyclerView.setLayoutManager(layoutManager);
        mRecyclerView.setAdapter(adapter);


        userRef.child(users.getUid()).child("courses").addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(final DataSnapshot dataSnapshot) {

                if(dataSnapshot.exists()){
                    long datacount = dataSnapshot.getChildrenCount();
                    int i = 0;
                    for(DataSnapshot dataHasil : dataSnapshot.getChildren()){
                        final String idCourse =  dataHasil.getKey();
                        obj3.add(idCourse);
                        Log.e("obj3", obj3.toString());
                            queryObj3(obj3);

                    }
                }else {

                }

            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });


        return v;
    }

    public void queryObj3(final ArrayList<String> obj3){

//note ternyata stelah dilihat lewat log, semua looping sblum proses query (cth: mataKul.child().addlistener) akan di prosess terlebih dahulu... dan stelah itu baru query di looping, dan juga untuk looping ke lv query berikutnya... looping query sblumnya akan dislesaikan dulu baru mulai looping####
        final ArrayList<Integer> test1 = new ArrayList<>();
        final ArrayList<Integer> test2 = new ArrayList<>();
        for(int j = 0 ; j<obj3.size() ;j++){
            int k = 0;

                mataKuliahRef.child(obj3.get(j)).addValueEventListener(new ValueEventListener() {
                    @Override
                    public void onDataChange(final DataSnapshot dataSnapshot) {
                        if (dataSnapshot.exists()) {
                            final String name = (String) dataSnapshot.child("name").getValue();
                            if (dataSnapshot.hasChild("pengumuman")) {
                                for (DataSnapshot idKeyPeng : dataSnapshot.child("pengumuman").getChildren()) {
//                                listTugasKey.add(idKeyPeng.getKey());
                                    test1.add(0); // size akan slalu bertmbah jika ada childkey pengumuman
                                    daftarPengumumanRef.child(idKeyPeng.getKey()).addValueEventListener(new ValueEventListener() {
                                        @Override
                                        public void onDataChange(DataSnapshot dataSnapshot2) {
                                            DaftarPengumuman pengumuman = new DaftarPengumuman();
                                            pengumuman = dataSnapshot2.getValue(DaftarPengumuman.class);
                                            pengumuman.setNama_p(name);
                                            listPengumuman.add(pengumuman);
                                            test2.add(0); // size akan bertmbah jika child key sudah di load

                                            if (test1.size() == test2.size()) {
                                                hashMap();
                                            }

                                        }

                                        @Override
                                        public void onCancelled(DatabaseError databaseError) {

                                        }
                                    });
                                }//end of for

                            }//end of has child
                            else {
                            }


                        }//end of if exist


                    }//end of first ondatachange


                    @Override
                    public void onCancelled(DatabaseError databaseError) {

                    }
                });
        }
    }



    private HashMap<String, List<DaftarPengumuman>> groupDataIntoHashMap(List<DaftarPengumuman> listOfDaftarPengumuman) {

        HashMap<String, List<DaftarPengumuman>> groupedHashMap = new HashMap<>();

        for (DaftarPengumuman daftarPengumuman : listOfDaftarPengumuman) {

            String hashMapKey = daftarPengumuman.getNama_p();

            if (groupedHashMap.containsKey(hashMapKey)) {
                // The key is already in the HashMap; add the pojo object
                // against the existing key.
                groupedHashMap.get(hashMapKey).add(daftarPengumuman);
            } else {
                // The key is not there in the HashMap; create a new key-value pair
                List<DaftarPengumuman> list = new ArrayList<>();
                list.add(daftarPengumuman);
                groupedHashMap.put(hashMapKey, list);
            }
        }


        return groupedHashMap;
    }

    private void hashMap(){
        HashMap<String, List<DaftarPengumuman>> groupedHashMap = groupDataIntoHashMap(listPengumuman);

        for (String nama_p : groupedHashMap.keySet()) {
            PengumumanItem nameItem = new PengumumanItem();
            nameItem.setNama_matkul(nama_p);
            consolidatedList.add(nameItem);


            for (DaftarPengumuman daftarPengumuman : groupedHashMap.get(nama_p)) {
                GeneralItem generalItem = new GeneralItem();
                generalItem.setDaftarPengumuman(daftarPengumuman);//setBookingDataTabs(bookingDataTabs);
                consolidatedList.add(generalItem);
            }
        }
    }


}
public-ThreeFragment(){
//必需的空公共构造函数
}
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
v=充气机。充气(R.layout.fragment_three,容器,假);
userRef=FirebaseDatabase.getInstance().getReference(“用户”);
users=FirebaseAuth.getInstance().getCurrentUser();
mataKuliahRef=FirebaseDatabase.getInstance().getReference(“课程”);
daftarPengumumanRef=FirebaseDatabase.getInstance().getReference(“pengumuman”);
mAuth=FirebaseAuth.getInstance();
mRecyclerView=(RecyclerView)v.findViewById(R.id.PengumumanRView);
mRecyclerView.setHasFixedSize(true);
adapter=new-PengumumanAdapter(getActivity().getApplicationContext(),consolidatedList);
LinearLayoutManager布局管理器=新的LinearLayoutManager(getActivity().getApplicationContext());
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
mRecyclerView.setLayoutManager(layoutManager);
mRecyclerView.setAdapter(适配器);
userRef.child(users.getUid()).child(“课程”).addValueEventListener(新的ValueEventListener()){
@凌驾
公共无效onDataChange(最终数据快照数据快照){
if(dataSnapshot.exists()){
long datacount=dataSnapshot.getChildrenCount();
int i=0;
对于(DataSnapshot dataHasil:DataSnapshot.getChildren()){
最后一个字符串idCourse=dataHasil.getKey();
obj3.add(idCourse);
Log.e(“obj3”,obj3.toString());
queryObj3(obj3);
}
}否则{
}
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
}
});
返回v;
}
公共无效查询BJ3(最终阵列列表obj3){
//请注意,在日志中,循环过程查询(cth:mataKul.child().addlistener)将是一个非常复杂的过程……并且,循环查询将是一个循环,而循环查询将是一个循环####
final ArrayList test1=新的ArrayList();
最终ArrayList test2=新ArrayList();
对于(intj=0;j试试这个

viewPager.setOffscreenPageLimit(3);

我忘了在我的名单上写通知。谢谢