mahdi0020 10 ارسال شده در 17 بهمن، ۱۳۹۷ اشتراک گذاری ارسال شده در 17 بهمن، ۱۳۹۷ سلام وقتتون بخیر. من یه tablayout دارم که وقتی اجرا میشه همزمان دو تا فرگمنت رو اجرا میکنه چی کارش کنم تا فقط یه فرگمنت رو اجرا کنه ؟ tablayout با viewpager ساخته شده لینک ارسال به اشتراک گذاری در سایت های دیگر تنظیمات بیشتر اشتراک گذاری ...
محمدرضا شاهپیری 5,582 ارسال شده در 17 بهمن، ۱۳۹۷ اشتراک گذاری ارسال شده در 17 بهمن، ۱۳۹۷ در 45 دقیقه قبل، mahdi0020 گفته است : سلام وقتتون بخیر. من یه tablayout دارم که وقتی اجرا میشه همزمان دو تا فرگمنت رو اجرا میکنه چی کارش کنم تا فقط یه فرگمنت رو اجرا کنه ؟ tablayout با viewpager ساخته شده توصیه میشه از ViewStub استفاده کنید. اینجوری فقط فرگمنتی که توی صفحه ظاهر میشه لود میشه. لینک ارسال به اشتراک گذاری در سایت های دیگر تنظیمات بیشتر اشتراک گذاری ...
mahdi0020 10 ارسال شده در 17 بهمن، ۱۳۹۷ سازنده اشتراک گذاری ارسال شده در 17 بهمن، ۱۳۹۷ سلام. طرز کارکردش چطوریه ؟ چطوری میشه ازش برای tablayout استفاده کرد ؟ ممنون... لینک ارسال به اشتراک گذاری در سایت های دیگر تنظیمات بیشتر اشتراک گذاری ...
محمدرضا شاهپیری 5,582 ارسال شده در 17 بهمن، ۱۳۹۷ اشتراک گذاری ارسال شده در 17 بهمن، ۱۳۹۷ به شکل زیر عمل کنید. 1- یه لیوت به نام fragment_viewstub اینجاد کنید با کدهای زیر. <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <ProgressBar android:id="@+id/inflateProgressbar" android:foregroundGravity="center" android:layout_gravity="center" android:indeterminate="true" android:layout_width="48dp" android:layout_height="48dp"/> <ViewStub android:id="@+id/fragmentViewStub" android:layout_width="match_parent" android:layout_height="match_parent"/> </FrameLayout> 2- کلاس BaseViewStubFragment رو به شکل زیر ایجاد کنید. public abstract class BaseViewStubFragment extends Fragment { private Bundle mSavedInstanceState; private boolean mHasInflated = false; private ViewStub mViewStub; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_viewstub, container, false); mViewStub = (ViewStub) view.findViewById(R.id.fragmentViewStub); mViewStub.setLayoutResource(getViewStubLayoutResource()); mSavedInstanceState = savedInstanceState; if (getUserVisibleHint() && !mHasInflated) { View inflatedView = mViewStub.inflate(); onCreateViewAfterViewStubInflated(inflatedView, mSavedInstanceState); afterViewStubInflated(view); } return view; } protected abstract void onCreateViewAfterViewStubInflated(View inflatedView, Bundle savedInstanceState); /** * The layout ID associated with this ViewStub * @see ViewStub#setLayoutResource(int) * @return */ @LayoutRes protected abstract int getViewStubLayoutResource(); /** * * @param originalViewContainerWithViewStub */ @CallSuper protected void afterViewStubInflated(View originalViewContainerWithViewStub) { mHasInflated = true; if (originalViewContainerWithViewStub != null) { View pb = originalViewContainerWithViewStub.findViewById(R.id.inflateProgressbar); pb.setVisibility(View.GONE); } } @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); if (isVisibleToUser && mViewStub != null && !mHasInflated) { View inflatedView = mViewStub.inflate(); onCreateViewAfterViewStubInflated(inflatedView, mSavedInstanceState); afterViewStubInflated(getView()); } } // Thanks to Noa Drach, this will fix the orientation change problem @Override public void onDetach() { super.onDetach(); mHasInflated = false; } } 3- حالا هر جا خواستید فرگمنت خواستید ایجاد کنید کافیه اونو از BaseViewStubFragment مشتق کنید public class BaseFragment extends BaseViewStubFragment { private Context context; private View rootView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); context=getActivity(); } @Override protected void onCreateViewAfterViewStubInflated(View inflatedView, Bundle savedInstanceState) { if (rootView == null) { rootView = inflatedView; } else { ((ViewGroup) rootView.getParent()).removeView(rootView); } } @Override protected int getViewStubLayoutResource() { return R.layout.fragment1; } } لینک ارسال به اشتراک گذاری در سایت های دیگر تنظیمات بیشتر اشتراک گذاری ...
mahdi0020 10 ارسال شده در 18 بهمن، ۱۳۹۷ سازنده اشتراک گذاری ارسال شده در 18 بهمن، ۱۳۹۷ در 21 ساعت قبل، محمدرضا شاهپیری گفته است : به شکل زیر عمل کنید. 1- یه لیوت به نام fragment_viewstub اینجاد کنید با کدهای زیر. <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <ProgressBar android:id="@+id/inflateProgressbar" android:foregroundGravity="center" android:layout_gravity="center" android:indeterminate="true" android:layout_width="48dp" android:layout_height="48dp"/> <ViewStub android:id="@+id/fragmentViewStub" android:layout_width="match_parent" android:layout_height="match_parent"/> </FrameLayout> 2- کلاس BaseViewStubFragment رو به شکل زیر ایجاد کنید. public abstract class BaseViewStubFragment extends Fragment { private Bundle mSavedInstanceState; private boolean mHasInflated = false; private ViewStub mViewStub; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_viewstub, container, false); mViewStub = (ViewStub) view.findViewById(R.id.fragmentViewStub); mViewStub.setLayoutResource(getViewStubLayoutResource()); mSavedInstanceState = savedInstanceState; if (getUserVisibleHint() && !mHasInflated) { View inflatedView = mViewStub.inflate(); onCreateViewAfterViewStubInflated(inflatedView, mSavedInstanceState); afterViewStubInflated(view); } return view; } protected abstract void onCreateViewAfterViewStubInflated(View inflatedView, Bundle savedInstanceState); /** * The layout ID associated with this ViewStub * @see ViewStub#setLayoutResource(int) * @return */ @LayoutRes protected abstract int getViewStubLayoutResource(); /** * * @param originalViewContainerWithViewStub */ @CallSuper protected void afterViewStubInflated(View originalViewContainerWithViewStub) { mHasInflated = true; if (originalViewContainerWithViewStub != null) { View pb = originalViewContainerWithViewStub.findViewById(R.id.inflateProgressbar); pb.setVisibility(View.GONE); } } @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); if (isVisibleToUser && mViewStub != null && !mHasInflated) { View inflatedView = mViewStub.inflate(); onCreateViewAfterViewStubInflated(inflatedView, mSavedInstanceState); afterViewStubInflated(getView()); } } // Thanks to Noa Drach, this will fix the orientation change problem @Override public void onDetach() { super.onDetach(); mHasInflated = false; } } 3- حالا هر جا خواستید فرگمنت خواستید ایجاد کنید کافیه اونو از BaseViewStubFragment مشتق کنید public class BaseFragment extends BaseViewStubFragment { private Context context; private View rootView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); context=getActivity(); } @Override protected void onCreateViewAfterViewStubInflated(View inflatedView, Bundle savedInstanceState) { if (rootView == null) { rootView = inflatedView; } else { ((ViewGroup) rootView.getParent()).removeView(rootView); } } @Override protected int getViewStubLayoutResource() { return R.layout.fragment1; } } خیلی ممنون ولی هر کاری میکنم نمیتونم ازش استفاده کنم !! وقتی از viewpager استفاده میکنم یه adapter میسازه اینجا باید چی کار کرد ؟ بعد چطوری بگم که این کلاس BaseViewStubFragment اجرا بشه ؟ لینک ارسال به اشتراک گذاری در سایت های دیگر تنظیمات بیشتر اشتراک گذاری ...
سوال
mahdi0020 10
سلام وقتتون بخیر.
من یه tablayout دارم که وقتی اجرا میشه همزمان دو تا فرگمنت رو اجرا میکنه چی کارش کنم تا فقط یه فرگمنت رو اجرا کنه ؟
tablayout با viewpager ساخته شده
لینک ارسال
به اشتراک گذاری در سایت های دیگر
4 پاسخ به این سوال تاکنون داده شده است
ارسالهای توصیه شده
بایگانی شده
این موضوع بایگانی و قفل شده و دیگر امکان ارسال پاسخ نیست.