[英]Fragment in TabLayout only load when user slide Android
嗨我正在使用tablayout
和viewpager
制作一個帶有A fragment
的應用程序,里面有很少的子fragment
。 問題是我的所有子fragment
(來自Tablayout
)總是執行(每當用戶單擊父fragment
時加載所有代碼。如何只在用戶滑動它時加載子fragment
(例如我有2個選項卡,內容)在標簽2中僅在用戶滑動到標簽2時加載
這是我的父fragment
代碼
public class ManageEventFragment extends Fragment {
public ManageEventFragment() {
// Required empty public constructor
}
TabLayout tabLayout;
ViewPager viewPager;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View viewFragment = inflater.inflate(R.layout.fragment_manage_event, container, false);
viewPager = (ViewPager) viewFragment.findViewById(R.id.viewPager);
tabLayout = (TabLayout) viewFragment.findViewById(R.id.tabLayout);
viewPager.setAdapter(new CustomAdapter(getChildFragmentManager(), getContext()));
viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
return viewFragment;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
// tabLayout.setupWithViewPager(viewPager);
tabLayout.post(new Runnable() {
@Override
public void run() {
tabLayout.setupWithViewPager(viewPager);
}
});
tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
viewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
viewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
viewPager.setCurrentItem(tab.getPosition());
}
});
if (ViewCompat.isLaidOut(tabLayout)) {
tabLayout.setupWithViewPager(viewPager);
} else {
tabLayout.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
@Override
public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
tabLayout.setupWithViewPager(viewPager);
tabLayout.removeOnLayoutChangeListener(this);
}
});
}
super.onActivityCreated(savedInstanceState);
}
//TabLayout and ViewPager class
private class CustomAdapter extends FragmentPagerAdapter {
private String fragments[] = {"Edit Event", "Create Event"};
public CustomAdapter(FragmentManager fragmentManager, Context context) {
super(fragmentManager);
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return new EditEventFragment();
case 1:
return new CreateEventFragment();
default:
return null;
}
}
@Override
public int getCount() {
return fragments.length;
}
@Override
public CharSequence getPageTitle(int position) {
return fragments[position];
}
}
}
而我的孩子片段代碼。 我希望這些代碼只在用戶滑動到子選項卡時執行。 任何幫助都非常感謝,謝謝
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
//Initializing our listEvents list
listEvents = new ArrayList();
recyclerView.setHasFixedSize(true);
layoutManager = new LinearLayoutManager(getContext());
recyclerView.setLayoutManager(layoutManager);
adapter = new EventAdapterEdit(getContext(),listEvents);
recyclerView.setAdapter(adapter);
requestQueue = Volley.newRequestQueue(getContext());
adapter = new EventAdapterEdit(getContext(),listEvents);
recyclerView.setAdapter(adapter);
getEventDetailRespond(requestQueue);
@Override public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
}
您可以在ViewPager
Adapter
片段中使用上述方法
if(isVisibleToUser){//dosomething when the fragment is visible}
else{//dosomething else.}
要注意不要在那里或其他任何地方初始化視圖,在onViewCreated
初始化你的視圖並調用你想在setUserVisibleHint
執行的方法。 另一個丑陋的方法是向ViewPager
添加一個滾動偵聽ViewPager
並獲取當前項目位置並觸發片段內的操作。 要從ViewPager
Adapter
獲取片段,您可以這樣做:
MyFragment frag = (MyFragment) pager.getAdapter().instantiateItem(pager, position);
然后你可以調用MyFragment
的方法
Viewpager默認加載相鄰的片段以確保使應用程序流暢,以便當用戶滑動到片段(已經加載)時,它就在那里。 要更改是默認行為,請使用viewpager.setOffscreenPageLimit(int limit)
,其中limit是預先加載的那個片段旁邊的片段數。 希望這可以幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.