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变量的位置手动添加它。通过强制转换,系统应该找到该方法,这就是为什么我建议不添加此方法的原因