商城项目中使用最多的就是这个套路 - 各种订单列表,各种商品展示。每次布局的时候就想VC过来。所以就要频繁的去查找之前的写的代码,中间各种剔除逻辑。烦不胜烦。所以就 记录下大概模型。下次直接从博客拷贝。
Actvity类中的 xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<android.support.design.widget.TabLayout
android:id="@+id/tl_tab"
android:layout_width="match_parent"
android:layout_height="@dimen/d48"
android:background="@color/white"
android:fillViewport="false"
app:tabIndicatorColor="@color/E1251B"
app:tabSelectedTextColor="@color/c333333"
app:tabTextColor="@color/c666666">
</android.support.design.widget.TabLayout>
<View
android:layout_width="match_parent"
android:layout_height="@dimen/d1"
android:layout_marginLeft="@dimen/d16"
android:layout_marginRight="@dimen/d16"
android:background="@color/cE6E6E6" />
<android.support.v4.view.ViewPager
android:id="@+id/vpFollowCompany"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</LinearLayout>
</LinearLayout>
Activity 类 Java代码:
public class MineBargainActivity extends DBaseActivity {
private TabLayout toolbar_tab;
private ViewPager vpFollowCompany;
private MineBargainFragment mPosterFragment;//全部
private List<Fragment> fragmentList;
private int index = 0;
@Override
public void initTitle() {
getDTitle().createTitle(R.mipmap.ic_back, "砍价订单", "")
.setBgColor(R.color.cffffff)
.setSpaceLineIsVisbale(View.VISIBLE)
.setLeftClickListener(new DTitle.LeftClickListener() {
@Override
public void onClick() {
MineBargainActivity.this.finish();
}
});
}
@Override
public int res() {
return R.layout.activity_bargain;
}
@Override
public void initView() {
index = getIntent().getIntExtra("index", 0);
toolbar_tab = (TabLayout) findViewById(R.id.tl_tab);
vpFollowCompany = (ViewPager) findViewById(R.id.vpFollowCompany);
}
@Override
public void initData() {
initFragments();
vpFollowCompany.setCurrentItem(index);
}
@Override
public void httpSuccess(String url, ResultBean data) {
}
@Override
public void httpError(int code, String url) {
}
public void initFragments() {
List<String> mList = new ArrayList<>();
fragmentList = new ArrayList<>();
mList.add("全部");
mList.add("待成单");
mList.add("待发货");
mList.add("待收货");
mList.add("完成");
for (int x = 0; x < mList.size(); x++) {
TabLayout.Tab tab1 = toolbar_tab.newTab().setText(mList.get(x));
mPosterFragment = MineBargainFragment.getInstance(String.valueOf(x));//待发货
fragmentList.add(mPosterFragment);
toolbar_tab.addTab(tab1);
}
PagerAdapter mPagerAdapter = new PagerAdapter(getSupportFragmentManager());
vpFollowCompany.setAdapter(mPagerAdapter);
vpFollowCompany.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(toolbar_tab));
toolbar_tab.setOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(vpFollowCompany));
}
public class PagerAdapter extends FragmentPagerAdapter {
public PagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return fragmentList.get(position);
}
@Override
public int getCount() {
return fragmentList.size();
}
}
}
其中DBaseActivity 是抽的基类,封装一下网络的处理,方法的封装,不需要关系
Framgent 继承 BaseLazyFragment 做统一的懒加载处理
public abstract class BaseLazyFragment extends DBaseFragment {
/**
* 懒加载过
*/
protected boolean isLazyLoaded = false;
/**
* Fragment的View加载完毕的标记
*/
private boolean isPrepared = false;
/**
* 第一步,改变isPrepared标记
* 当onViewCreated()方法执行时,表明View已经加载完毕,此时改变isPrepared标记为true,并调用lazyLoad()方法
*/
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
isPrepared = true;
//只有Fragment onCreateView好了
//另外这里调用一次lazyLoad()
lazyLoad();
}
/**
* 第二步
* 此方法会在onCreateView()之前执行
* 当viewPager中fragment改变可见状态时也会调用
* 当fragment 从可见到不见,或者从不可见切换到可见,都会调用此方法
* true表示当前页面可见,false表示不可见
*/
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
//只有当fragment可见时,才进行加载数据
if (isVisibleToUser){
lazyLoad();
}
}
/**
* 调用懒加载
* 第三步:在lazyLoad()方法中进行双重标记判断,通过后即可进行数据加载
*/
private void lazyLoad() {
if (getUserVisibleHint() && isPrepared && !isLazyLoaded) {
showFirstLoading();
onLazyLoad();
isLazyLoaded = true;
} else {
//当视图已经对用户不可见并且加载过数据,如果需要在切换到其他页面时停止加载数据,可以覆写此方法
if (isLazyLoaded) {
stopLoad();
}
}
}
/**
* 视图销毁的时候讲Fragment是否初始化的状态变为false
*/
@Override
public void onDestroyView() {
super.onDestroyView();
isLazyLoaded = false;
isPrepared = false;
}
/**
* 第一次可见时,操作该方法,可以用于showLoading操作,注意这个是全局加载loading
*/
protected void showFirstLoading() {
}
/**
* 停止加载
* 当视图已经对用户不可见并且加载过数据,但是没有加载完,而只是加载loading。
* 如果需要在切换到其他页面时停止加载数据,可以覆写此方法。
* 存在问题,如何停止加载网络
*/
protected void stopLoad(){
}
/**
* 第四步:定义抽象方法onLazyLoad(),具体加载数据的工作,交给子类去完成
*/
@UiThread
protected abstract void onLazyLoad();
}
同样DBaseFragment 不需要关心。
OK,结束。下一篇不知道啥时候开始写了,主要是第一个版本还没有上线 ,第二个版本已经给画饼了。