比如在LazyFragment里面mProgressBar.setVisibility(View.GONE);这个加载进度放在这里设置隐藏是否合适?总觉得进度圈消失得太快了.有更优的解决方法吗?下面是效果和LazyFragment,BaseFragment代码和BaseFragment的布局:
1.效果(加载中后加载成功后):
2.BaseFragment布局:
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
android:id="@+id/toolbar"
android:background="#33ff0000"
android:layout_width="match_parent"
android:layout_height="wrap_content">
android:id="@+id/iv_back"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="20dp"
android:paddingBottom="20dp"
android:paddingRight="20dp"
android:paddingLeft="10dp" />
android:id="@+id/tv_back"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_toRightOf="@id/iv_back"
android:textSize="15sp" />
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:textColor="#FF333333"
android:text="基类"
android:textSize="20sp" />
android:id="@+id/iv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
android:id="@+id/tv_more"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="end"
android:padding="16dp"
android:textSize="15sp" />
android:id="@+id/iv_more"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end"
android:padding="16dp" />
android:id="@+id/content_container"
android:layout_width="match_parent"
android:layout_height="match_parent">
android:id="@+id/rl_progress"
android:background="#ffffff"
android:visibility="gone"
android:layout_width="match_parent"
android:layout_height="match_parent">
android:layout_centerInParent="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
3.BaseFragment代码:
public abstract class BaseFragment extends Fragment {
private View rootView;
protected FrameLayout frameLayout;
protected TextView mTvTitle;
protected TextView mTvMore;
protected ImageView mIvBack;
protected ImageView mIvTitle;
protected ImageView mIvMore;
protected Toolbar mToolbar;
protected RelativeLayout mProgressBar;
private Unbinder unbinder;
private static final String TAG = "BaseFragment";
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
if (rootView != null) return rootView; //初始化布局后就不再重复加载
rootView = inflater.inflate(R.layout.fragment_base, container, false);
mProgressBar=rootView.findViewById(R.id.rl_progress);
mProgressBar.setVisibility(View.VISIBLE);
frameLayout = rootView.findViewById(R.id.content_container);
mToolbar = rootView.findViewById(R.id.toolbar);
mTvTitle = rootView.findViewById(R.id.tv_title);
mTvMore = rootView.findViewById(R.id.tv_more);
mIvBack = rootView.findViewById(R.id.iv_back);
mIvTitle = rootView.findViewById(R.id.iv_title);
mIvMore = rootView.findViewById(R.id.iv_more);
View view = View.inflate(getActivity(), getLayout(), null);
frameLayout.addView(view);
unbinder = ButterKnife.bind(this, view);
initView(savedInstanceState);
return rootView;
}
/**
* 绑定布局文件
*/
protected abstract int getLayout();
/**
* 初始化布局,但是不加载数据
*/
protected abstract void initView(Bundle savedInstanceState);
@Override
public void onDestroy() {
super.onDestroy();
if (unbinder != null) {
unbinder.unbind();
}
}
}
4.懒加载fragment代码:
public abstract class LazyFragment extends BaseFragment {
protected boolean isViewInitiated; //是否初始化过布局
protected boolean isVisibleToUser; //当前界面是否可见
protected boolean isDataInitiated; //是否加载过数据
private static final String TAG = "LazyFragment";
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
isViewInitiated=true;
prepareFetchData();
}
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
this.isVisibleToUser = isVisibleToUser;
if (isVisibleToUser) {
prepareFetchData();
}
}
/**
* 懒加载
*/
public abstract void fetchData();
public void prepareFetchData() {
prepareFetchData(false);
}
/**
* 判断懒加载条件,在这里访问服务器获取然后设置数据
*/
public void prepareFetchData(boolean forceUpdate) {
if (isVisibleToUser && isViewInitiated && (!isDataInitiated || forceUpdate)) {
mProgressBar.setVisibility(View.GONE); //隐藏加载进度
fetchData();
isDataInitiated = true;
}
}
@Override
public void onDetach() {
super.onDetach();
isDataInitiated = false;
}
}
5.具体使用类:
public class FragmentA extends LazyFragment {
@BindView(R.id.tv_a)
TextView mTextView;
@Override
protected void initView( Bundle savedInstanceState) {
mTextView.setText("11111111111111111");
}
@Override
protected int getLayout() {
return R.layout.fragment_a;
}
@Override
public void fetchData() {
}
}