在我 select Tab 之前加载进度条
Progress bar loading before I select the Tab
这是我的选项卡初始化代码:
private void initTabs() {
serviceTabs.addTab(serviceTabs.newTab().setText("Request Appointment"));
serviceTabs.addTab(serviceTabs.newTab().setText("Online Booking"));
serviceTabs.addTab(serviceTabs.newTab().setText("Feedback"));
serviceViewpager.setOffscreenPageLimit(serviceTabs.getTabCount());
final ViewPageAdapter adapter = new ViewPageAdapter(getChildFragmentManager(), serviceTabs.getTabCount(),
mContext);
serviceViewpager.setAdapter(adapter);
serviceViewpager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(serviceTabs));
serviceTabs.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
serviceViewpager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
Log.i("", "on tab unselected Service");
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
Log.i("", "on tab reselected Service ");
}
});
}
private class ViewPageAdapter extends FragmentStatePagerAdapter {
int mNumOfTabs;
Context context;
ViewPageAdapter(FragmentManager fm, int numOfTabs, Context context) {
super(fm);
this.mNumOfTabs = numOfTabs;
this.context = context;
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return new CustomizeFragment();
case 1:
Bundle url = new Bundle(); url.putString(Constants.WEB_URL,Constants.APPOINTMENT_ONLINE_BOOKING);
return WebViewFragment.createInstance(url);
case 2:
return new CustomizeFragment();
default:
return null;
}
}
@Override
public int getCount() {
return mNumOfTabs;
}
}
@Override
public void onDestroyView() {
super.onDestroyView();
unbinder.unbind();
}
我正在 WebViewFragment 中加载进度条,如下所示:
public static WebViewFragment createInstance(Bundle urlArgs) {
WebViewFragment webView = new WebViewFragment();
webView.setArguments(urlArgs);
return webView;
}
@Override
public View onCreateView(LayoutInflater layoutInflater, ViewGroup container, Bundle saveInstanceState) {
rootView = layoutInflater.inflate(R.layout.load_web_view, container, false);
activity = getActivity();
url=getArguments().getString(Constants.WEB_URL);
mContext = activity.getApplicationContext();
serviceAppointmentView = (WebView) rootView.findViewById(R.id.webView);
loadData();
return rootView;
}
public void loadData()
{
serviceAppointmentView.clearView();
webSettings = serviceAppointmentView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setSupportZoom(true);
webSettings.setBuiltInZoomControls(true);
webSettings.setLoadWithOverviewMode(true);
webSettings.setUseWideViewPort(true);
progress = new Progress(activity);
pDialog = progress.showProgress();
pDialog.setCanceledOnTouchOutside(true);
serviceAppointmentView.loadUrl(url);
serviceAppointmentView.setWebViewClient(new
DealerWebViewClient());
}
private class DealerWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url)
{
view.loadUrl(url);
return true;
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
progress.dismissProgress(pDialog);
}
}
我正在使用在线预订选项卡的自定义进度条。这里的问题是在我点击在线预订选项卡之前进度开始加载。请告诉我我在哪里做错了或者如何解决这个问题...感谢您耐心地查看我的代码,任何建议都会对我有所帮助...!
默认情况下,View pager 将在当前选项卡的右侧和左侧至少加载 1 个选项卡。这样做,主要是因为当你滑动 viewpager 时,两个选项卡的某些区域都可见。对于那些平滑的过渡,预加载是必需的。
要防止这种情况,您可以使用此方法 setUserVisibleHint()
。
喜欢下面的代码:
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) {
// load data here
}else{
}
}
ViewPage有DEFAULT_OFFSCREEN_PAGES值为1,是最小值,不能设置为0。
这意味着当您初始化 viewpager 并添加片段时,当它在位置 0 处初始化片段时,它也会在位置 1 处初始化片段。
里面有方法,Fragment.class
setUserVisibleHint(boolean)
当片段对用户可见时调用(在 viewPager 中被选中)。
您可以覆盖它以实现您的加载进度在您需要的时候开始。
请记住,它也在
之前被解雇
onCreateView()
您可以检查视图是否已经膨胀,检查是否有任何视图不为空。
希望对你有所帮助
当 viewpager 加载当前片段的相邻片段时,最好在 xml 中使用进度条,例如 this 在使用 viewpager inseted of progressdialog 或其他东西时:
<ProgressBar
android:id="@+id/progressbar"
style="?android:attr/progressBarStyleLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|center_horizontal"
android:visibility="visible" />
默认Viewpager可以加载三个页面,time.one是当前页面,其余是当前页面的左侧和右侧page.So if你打开你的 activity 片段的相对侧也会 intializes.so overrride 这个方法在你的 onCreate()
下面的片段中
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) {
loaddata();
}else{
}
}
只要您的片段对用户可见,就会调用此方法
这是我的选项卡初始化代码:
private void initTabs() {
serviceTabs.addTab(serviceTabs.newTab().setText("Request Appointment"));
serviceTabs.addTab(serviceTabs.newTab().setText("Online Booking"));
serviceTabs.addTab(serviceTabs.newTab().setText("Feedback"));
serviceViewpager.setOffscreenPageLimit(serviceTabs.getTabCount());
final ViewPageAdapter adapter = new ViewPageAdapter(getChildFragmentManager(), serviceTabs.getTabCount(),
mContext);
serviceViewpager.setAdapter(adapter);
serviceViewpager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(serviceTabs));
serviceTabs.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
serviceViewpager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
Log.i("", "on tab unselected Service");
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
Log.i("", "on tab reselected Service ");
}
});
}
private class ViewPageAdapter extends FragmentStatePagerAdapter {
int mNumOfTabs;
Context context;
ViewPageAdapter(FragmentManager fm, int numOfTabs, Context context) {
super(fm);
this.mNumOfTabs = numOfTabs;
this.context = context;
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return new CustomizeFragment();
case 1:
Bundle url = new Bundle(); url.putString(Constants.WEB_URL,Constants.APPOINTMENT_ONLINE_BOOKING);
return WebViewFragment.createInstance(url);
case 2:
return new CustomizeFragment();
default:
return null;
}
}
@Override
public int getCount() {
return mNumOfTabs;
}
}
@Override
public void onDestroyView() {
super.onDestroyView();
unbinder.unbind();
}
我正在 WebViewFragment 中加载进度条,如下所示:
public static WebViewFragment createInstance(Bundle urlArgs) {
WebViewFragment webView = new WebViewFragment();
webView.setArguments(urlArgs);
return webView;
}
@Override
public View onCreateView(LayoutInflater layoutInflater, ViewGroup container, Bundle saveInstanceState) {
rootView = layoutInflater.inflate(R.layout.load_web_view, container, false);
activity = getActivity();
url=getArguments().getString(Constants.WEB_URL);
mContext = activity.getApplicationContext();
serviceAppointmentView = (WebView) rootView.findViewById(R.id.webView);
loadData();
return rootView;
}
public void loadData()
{
serviceAppointmentView.clearView();
webSettings = serviceAppointmentView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setSupportZoom(true);
webSettings.setBuiltInZoomControls(true);
webSettings.setLoadWithOverviewMode(true);
webSettings.setUseWideViewPort(true);
progress = new Progress(activity);
pDialog = progress.showProgress();
pDialog.setCanceledOnTouchOutside(true);
serviceAppointmentView.loadUrl(url);
serviceAppointmentView.setWebViewClient(new
DealerWebViewClient());
}
private class DealerWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url)
{
view.loadUrl(url);
return true;
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
progress.dismissProgress(pDialog);
}
}
我正在使用在线预订选项卡的自定义进度条。这里的问题是在我点击在线预订选项卡之前进度开始加载。请告诉我我在哪里做错了或者如何解决这个问题...感谢您耐心地查看我的代码,任何建议都会对我有所帮助...!
默认情况下,View pager 将在当前选项卡的右侧和左侧至少加载 1 个选项卡。这样做,主要是因为当你滑动 viewpager 时,两个选项卡的某些区域都可见。对于那些平滑的过渡,预加载是必需的。
要防止这种情况,您可以使用此方法 setUserVisibleHint()
。
喜欢下面的代码:
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) {
// load data here
}else{
}
}
ViewPage有DEFAULT_OFFSCREEN_PAGES值为1,是最小值,不能设置为0。
这意味着当您初始化 viewpager 并添加片段时,当它在位置 0 处初始化片段时,它也会在位置 1 处初始化片段。
里面有方法,Fragment.class
setUserVisibleHint(boolean)
当片段对用户可见时调用(在 viewPager 中被选中)。
您可以覆盖它以实现您的加载进度在您需要的时候开始。 请记住,它也在
之前被解雇onCreateView()
您可以检查视图是否已经膨胀,检查是否有任何视图不为空。
希望对你有所帮助
当 viewpager 加载当前片段的相邻片段时,最好在 xml 中使用进度条,例如 this 在使用 viewpager inseted of progressdialog 或其他东西时:
<ProgressBar
android:id="@+id/progressbar"
style="?android:attr/progressBarStyleLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|center_horizontal"
android:visibility="visible" />
默认Viewpager可以加载三个页面,time.one是当前页面,其余是当前页面的左侧和右侧page.So if你打开你的 activity 片段的相对侧也会 intializes.so overrride 这个方法在你的 onCreate()
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) {
loaddata();
}else{
}
}
只要您的片段对用户可见,就会调用此方法