Android 如何回收碎片?

Android 如何回收碎片?,android,firebase-realtime-database,Android,Firebase Realtime Database,我有一个片段,我想使用相同的代码,但生成的每个标题都有另一个数据库引用路径 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { super.onCreateView(inflater, container, savedInstanceState); v = infl

我有一个片段,我想使用相同的代码,但生成的每个标题都有另一个数据库引用路径

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    super.onCreateView(inflater, container, savedInstanceState);
    v = inflater.inflate(R.layout.unu_fragment, container, false);

    mRecycler = (RecyclerView) v.findViewById(R.id.fragment_unu_recycler);
    layoutManager = new LinearLayoutManager(getActivity());
    mRecycler.setLayoutManager(layoutManager);


    mDatabase = FirebaseDatabase.getInstance();

        mRef = mDatabase.getReference(restName).child("Meniu").child(CategoryAdapter.category).child(*SUBCATEGORY*);
...
我有一个
RecyclerView
,它沿着这个路径,用一些项目填充片段,但我需要填充我拥有的每个选项卡,每个选项卡都有不同的
mRef
路径,正如您在
中看到的那样。child(*SUBCATEGORY*)

这就是我生成选项卡的方式:

databaseRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            for (DataSnapshot child: dataSnapshot.getChildren()){
                String key = child.getKey();
                adapter.AddFragment(new FragmentUnu(),key);
                viewPager.setAdapter(adapter);
                tabLayout.setupWithViewPager(viewPager);
            }
        }
                @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });

在这种情况下,我应该如何继续?

您的问题不是很清楚,但据我所知,您希望为不同的选项卡提供不同的引用路径,同时为宿主ViewPager中的每个片段子级使用相同的片段类

如果是你的情况:

在类中创建一个公共getter方法,该类在其布局中包含viewPager小部件:

        //will return the current position of the Tab
         public int getViewPagerCurrentPosition(){
           return viewpager.getCurrentItem()
        }
在您的片段子类中(在那里您有您的recyclerview):

如果托管类是活动

int position = (CAST:NAME_OF_THE_ACTIVITY)getActivity().getViewPagerCurrentPosition()
int position = (CAST:NAME_OF_THE_FRAGMENT)  getParentFragment().getViewPagerCurrentPosition()
如果宿主类是片段

int position = (CAST:NAME_OF_THE_ACTIVITY)getActivity().getViewPagerCurrentPosition()
int position = (CAST:NAME_OF_THE_FRAGMENT)  getParentFragment().getViewPagerCurrentPosition()
现在,您可以设置条件,根据选项卡的当前位置指定正确的参考路径

请记住,位置从0开始

如果(位置==0){…}否则

或开关(位置)

更新(另一种可能的解决方案)(我假设您需要片段中的childKey)

1-在片段内部创建此工厂方法(允许我们将参数传递给片段):

2-更新以下内容:

databaseRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            for (DataSnapshot child: dataSnapshot.getChildren()){
                String key = child.getKey();
                adapter.AddFragment(FragmentUnu.newInstance(key),key);
                viewPager.setAdapter(adapter);
                tabLayout.setupWithViewPager(viewPager);
            }
        }
                @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });
3-返回您的碎片UNU:

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        String key=  getArguments().getString(ARG_CHILDKEY);
}

现在您的片段中有了密钥

我不知道托管活动是谁,我的意思是我尝试了我认为是的活动,但它没有找到方法
getViewPagerRecrentPosition()
我尝试了
(*活动带有ValueEventList,如我在代码*中所写)getActivity().getViewPager..
getViewPagerCurrentPosition()
您应该添加以下方法(并确保它是公共的)。此方法不是Android sdk的一部分,您应该在具有viewPager变量的位置手动添加它。通过强制转换,系统应该找到该方法,这就是为什么我建议不添加此方法的原因