不知怎的,我的Fragment
每次都没有被调用。
这是问题:
我有3个标签,如此。
-------------------------------------
|Fragment1 Fragment2 Fragment3 |
| |
| |
| |
-------------------------------------
每当我点击 Fragment1 然后 Fragment3 时, Fragment3 的onCreateView
就会被调用。但是,当我点击 Fragment2 然后 Fragment3 时,它就没有了。
我正在使用扩展TabsPagerAdapter
FragmentPagerAdapter
以下是必需的代码段。 (如果您需要查看更多代码,请告诉我)。 的 TabsPagerAdapter
public class TabsPagerAdapter extends FragmentPagerAdapter {
private String[] tabs = { "Fragment1", "Fragment2", "Fragment3" };
List<Fragment> fragments;
public TabsPagerAdapter(FragmentManager fm, List<TabsPagerAdapter> fragments) {
super(fm);
this.fragments = fragments;
}
@Override
public CharSequence getPageTitle(int position) {
return tabs[position];
}
@Override
public Fragment getItem(int index) {
return fragments.get(index);
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
Fragment createdFragment = (Fragment) super.instantiateItem(container, position);
String tag = createdFragment.getTag();
return createdFragment;
}
@Override
public int getCount() {
// get item count - equal to number of tabs
return fragments.size();
}
}
Fragment3:
public class Fragment3 extends Fragment {
@Override
public void onAttach(Context context) {
super.onAttach(context);
this.context = context;
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
context=activity;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
......
Log.i("Blocked List","onCreateView called"); //This doesn't print
//sometimes
getList();//It holds the list for ListView
}
Fragment1
几乎与Fragment2
和Fragment3
相似。
帮助!
答案 0 :(得分:1)
我的解决方案使用片段覆盖方法,该方法仅在片段在ViewPager中可见时触发
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if(isVisibleToUser) {
//fragment visible code
}
else{
//fragment invisible code
}
}
答案 1 :(得分:0)
使用此解决方案,每次调用getItem()时,都会创建一个新的Fragment。您可以尝试懒惰地实例化片段(即在数组或集合中),然后在需要时返回它们。
请注意,您需要传入片段列表,而不是适配器。
在我的项目中,我使用通常有效的代码
public ProfilePagesAdapter(@NonNull FragmentManager fm,
@NonNull List<Fragment> fragments) {
super(fm);
this.fragments = fragments;
}
@Override
public Fragment getItem(int position) {
return fragments.get(position);
}
@Override
public int getCount() {
return fragments.size();
}
@Override
public CharSequence getPageTitle(int position) {
return fragments.get(position).getTitle();
}