عکس : سایت http://www.androidhive.info
علت نوشتن این پست این بود که من از تب لی اوت همراه با ویوپیجر برای پروژه ایی که داشتم روش کار می کردم استفاده کرده بودم اما یک جای کار ایراد داشت اونم این بود که من چهار تا تب داشتم و هرکدام از اونها از وب سرویس اطلاعات رو می گرفت . بعضی عملیات در داخل این تب ها به هم وصل بود. همراه با انجام اون عملیات باید تب کناری هم رفرش میشد.
یک ویژگی viewpager این است که setoffscreenpagelimit برای اون حداقل می تونه یک باشه.
Setoffscreenpagelimit = امکان این که چند تب از هر دو طرف تب در حال اجرای شما، همزمان با هم لود شوند.
من میخواستم که وقتی بین تب ها هر وقت سویچ می کنم فرگمنت داخل اونها کامل Destroy بشه و دوباره از اول ساخته بشه اما این عمل انجام نمی شد یعنی اگر شما بلافاصله به تب های کناریتون سویچ کنید،اونها از قبل لود شدن. هرکاری کردم این کار درست نشده که بتونم کاری کنم که تب های کناری بدون اینکه Select بشن لود نشن از قبل. بعد از کلی تحقیق متوجه شدم که راهی جز حذف ویوپیجر ندارم.
این Tablayout whithout Viewpager لینکی است که ازش استفاده کردم برای این کار
بعد از استفاده از این روش متوجه مشکل دیگه ای شدم این بود که هنگامی که داخل فرگمنتها که Tablayout بود.
اولین تب اجرا نمی شد اما وقتی روی دومین تب کلیک می کنیم همه چی به حالت عادی برمیگرده و درست عمل میکنه.
راه حلش رو پیدا کردم و براتون قرار دادم امیدوارم بتونه به صرفه جویی در زمان شما کمک کنه.
tabs_fragment.getTabAt(1).select();
۲- کدهایی رو که مربوط به Ui نیست رو در متد onActivityCreat قراردهید.
private void setupTabLayout() {
fragment2 = new RequestFrienshipFragment();
fragment1 = new FriendshipFragment();
tabs_fragment.addTab(tabs_fragment.newTab().setText("two"), true);
tabs_fragment.addTab(tabs_fragment.newTab().setText("one"));
}
private void setCurrenttabFragment(int tabPosition) {
switch (tabPosition) {
case 0:
replaceFragment(fragment2);
break;
case 1:
replaceFragment(fragment1);
break;
}
}
public class FriendsFragment2 extends Fragment {
CustomTabLayout tabs_fragment;
FriendshipFragment fragment1;
RequestFrienshipFragment fragment2;
public FriendsFragment2() {
// Required empty public constructor
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container
, @Nullable Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_friends2, container, false);
tabs_fragment = (CustomTabLayout) rootView.findViewById(R.id.tabs_fragment);
return rootView;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
setupTabLayout();
EventTab();
tabs_fragment.post(new Runnable() {
@Override
public void run() {
tabs_fragment.getTabAt(1).select();
}
});
}
private void setupTabLayout() {
fragment2 = new RequestFrienshipFragment();
fragment1 = new FriendshipFragment();
tabs_fragment.addTab(tabs_fragment.newTab().setText("درخواست دوستی"), true);
tabs_fragment.addTab(tabs_fragment.newTab().setText("دوستان"));
}
private void EventTab() {
tabs_fragment.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
setCurrenttabFragment(tab.getPosition());
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
}
private void setCurrenttabFragment(int tabPosition) {
switch (tabPosition) {
case 0:
replaceFragment(fragment2);
break;
case 1:
replaceFragment(fragment1);
break;
}
}
private void replaceFragment(Fragment fragment) {
FragmentManager fm = getChildFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
; ft.replace(R.id.frame_container_friends_fragment, fragment);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.commit()