Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/212.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有办法根据firebase数据库中的子项数量动态更改Android中的选项卡数量?_Android_Firebase_Firebase Realtime Database_Tabs - Fatal编程技术网

有没有办法根据firebase数据库中的子项数量动态更改Android中的选项卡数量?

有没有办法根据firebase数据库中的子项数量动态更改Android中的选项卡数量?,android,firebase,firebase-realtime-database,tabs,Android,Firebase,Firebase Realtime Database,Tabs,我必须创建一个具有选项卡数量的项目,该数量是根据firebase数据库中的子级数量决定的 我需要的标签数量减少和增加,如果一个新的孩子被删除或添加到数据库分别 我已成功获取Firebase数据库中的子级数,但无法将其传递给决定选项卡数的函数(getcount()) 从中检索Firebase数据的类: import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import andro

我必须创建一个具有选项卡数量的项目,该数量是根据firebase数据库中的子级数量决定的

我需要的标签数量减少和增加,如果一个新的孩子被删除或添加到数据库分别

我已成功获取Firebase数据库中的子级数,但无法将其传递给决定选项卡数的函数(
getcount()

从中检索Firebase数据的类:

import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;

import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;

/**
 * A simple {@link Fragment} subclass.
 */
public class CommunitiesFragment extends Fragment {
    private static int commonVariable;
    private DatabaseReference mDatabaseReference;


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

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View v=inflater.inflate(R.layout.community_tab, container, false);
        mDatabaseReference = FirebaseDatabase.getInstance().getReference().child("COMMUNITIES");
            Log.e("TESTApp", "The value is checked");
            mDatabaseReference.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                    commonVariable = (int) dataSnapshot.getChildrenCount();
                    Log.e("COMMON-VALUE", commonVariable + "");

                }

                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {

                }
            });

            return v;
    }

     static int tabNumber(){
        int a = CommunitiesFragment.commonVariable;
        Log.e("Tab Function Value:",a+"");
        return a;
    }

}
负责创建选项卡的选项卡适配器类:

import android.os.Bundle;
import android.util.Log;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentStatePagerAdapter;


public class CommunityAdapter extends FragmentStatePagerAdapter {
    public CommunityAdapter(@NonNull FragmentManager fm) {
        super(fm,BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
    }


    @NonNull
    @Override
    public Fragment getItem(int position) {
        CommunitiesFragment communitiesFragment=new CommunitiesFragment();
        Bundle bundle=new Bundle();
        position=position+1;
        bundle.putString("message","Success"+position);
        communitiesFragment.setArguments(bundle);

        return communitiesFragment;
    }

    @Override
    public int getCount(){
        int TabNumber = CommunitiesFragment.tabNumber();
        Log.e("InGetCountFunction",TabNumber+"");
        return TabNumber;
    }

    @Nullable
    @Override
    public CharSequence getPageTitle(int position) {
        position=position+1;
        return "COMMUNITY "+position ;
    }

    public class CommunityViewHolder {

    }

}
Firebase数据库的图像

我希望选项卡的数量等于社区的子级数量。 下一步是在各自的选项卡中显示每个子级的嵌套属性

目前TabNumber函数没有提供正确的值,它只显示0。 我还觉得可能是firebase的onDataChanege功能在应用程序启动时没有被触发

错误原因的Logcat:

    2019-12-22 20:13:43.670 1408-1460/? E/SurfaceFlinger: ro.sf.lcd_density must be defined as a build property
2019-12-22 20:13:52.354 7275-7275/com.testapp E/Tab Function Value:: 0
2019-12-22 20:13:52.354 7275-7275/com.testapp E/InGetCountFunction: 0
2019-12-22 20:13:52.355 7275-7275/com.testapp E/Tab Function Value:: 0
2019-12-22 20:13:52.355 7275-7275/com.testapp E/InGetCountFunction: 0
2019-12-22 20:13:52.362 7275-7275/com.testapp E/Tab Function Value:: 0
2019-12-22 20:13:52.362 7275-7275/com.testapp E/InGetCountFunction: 0
2019-12-22 20:13:52.364 7275-7275/com.testapp E/Tab Function Value:: 0
2019-12-22 20:13:52.364 7275-7275/com.testapp E/InGetCountFunction: 0
2019-12-22 20:13:52.412 7275-7275/com.testapp E/Tab Function Value:: 0
2019-12-22 20:13:52.412 7275-7275/com.testapp E/InGetCountFunction: 0
2019-12-22 20:13:54.119 7275-7275/com.testapp E/Tab Function Value:: 0
2019-12-22 20:13:54.119 7275-7275/com.testapp E/InGetCountFunction: 0
2019-12-22 20:13:54.783 7275-7275/com.testapp E/Tab Function Value:: 0
2019-12-22 20:13:54.783 7275-7275/com.testapp E/InGetCountFunction: 0
2019-12-22 20:13:54.971 1595-1608/? E/memtrack: Couldn't load memtrack module
2019-12-22 20:13:55.265 7275-7275/com.testapp E/Tab Function Value:: 0
2019-12-22 20:13:55.265 7275-7275/com.testapp E/InGetCountFunction: 0
2019-12-22 20:13:55.799 7275-7275/com.testapp E/Tab Function Value:: 0
2019-12-22 20:13:55.799 7275-7275/com.testapp E/InGetCountFunction: 0
2019-12-22 20:13:56.263 7275-7275/com.testapp E/Tab Function Value:: 0
2019-12-22 20:13:56.263 7275-7275/com.testapp E/InGetCountFunction: 0
2019-12-22 20:14:04.765 1595-1608/? E/memtrack: Couldn't load memtrack module

数据是从Firebase异步加载的,因为从服务器获取数据可能需要一些时间。您的主代码将继续运行,并(例如)初始化片段,而不是在等待数据时阻塞应用程序。此时,
onDataChange
尚未运行,并且
commonVariable
仍设置为其默认值。只有当数据可用时,才会调用
onDataChange
,并将
commonVariable
设置为正确的值。但此时片段已使用不正确的
commonVariable
值呈现


解决方案是将需要数据库数据的任何代码放入
onDataChange
中,或者从那里调用它。有关如何同时执行这两项操作的示例,请参见从Firebase异步加载数据,因为从服务器获取数据可能需要一些时间。您的主代码将继续运行,并(例如)初始化片段,而不是在等待数据时阻塞应用程序。此时,
onDataChange
尚未运行,并且
commonVariable
仍设置为其默认值。只有当数据可用时,才会调用
onDataChange
,并将
commonVariable
设置为正确的值。但此时片段已使用不正确的
commonVariable
值呈现


解决方案是将需要数据库数据的任何代码放入
onDataChange
中,或者从那里调用它。关于如何做到这两个方面的示例,请参见

感谢@Frank van Puffelen的解释,最终了解了问题所在,但是,我尝试了,但我仍然不确定,如何在
onDataChange
中添加代码来填充选项卡视图,也参考了链接,但是那里的代码和用例与我需要的完全不同。如果您能帮助我,我会非常感激,这方面有点新,谢谢您的
onDataChange
您会想要刷新片段,因为它取决于您正在更改的
commonVariable
。快速搜索提示您可能需要在其上调用
notifyDataSetChanged
:感谢@Frank van Puffelen的解释,最终了解了问题所在,但是,我尝试了,但我仍然不确定,如何添加代码以填充
onDataChange
内的选项卡视图,也参考了链接,但是那里的代码和用例与我需要的完全不同。如果您能帮助我,我会非常感激,这方面有点新,谢谢您的
onDataChange
您会想要刷新片段,因为它取决于您正在更改的
commonVariable
。快速搜索提示您可能需要对其调用
notifyDataSetChanged