小Dome05:实现JD首页功能

github

底层build.gradle

ext{
    retrofitVersion = '2.4.0'
    rxandroid = '2.1.0'
    butterknife = '8.8.1'
    okhttp = '3.11.0'
}

继承base底层

本层build.gradle

compile 'com.squareup.retrofit2:converter-scalars:2.0.0'
    compile 'com.facebook.fresco:fresco:0.11.0'
    compile 'com.hjm:BottomTabBar:1.1.1'
    implementation 'com.sunfusheng:marqueeview:1.3.2'
    compile 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0-alpha-14'
    compile 'org.greenrobot:eventbus:3.0.0'
    compile 'com.jakewharton:butterknife:8.8.1'
    annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
    compile 'com.jcodecraeer:xrecyclerview:1.5.9'
    compile 'com.youth.banner:banner:1.4.9'
    compile 'com.github.bumptech.glide:glide:3.7.0'
    compile 'com.gyf.immersionbar:immersionbar:2.3.1'
    compile "com.squareup.retrofit2:retrofit:$rootProject.ext.retrofitVersion"
    compile "com.squareup.retrofit2:converter-gson:$rootProject.ext.retrofitVersion"
    compile "com.squareup.retrofit2:adapter-rxjava2:$rootProject.ext.retrofitVersion"
    compile 'io.reactivex.rxjava2:rxandroid:2.1.0'
    compile 'com.squareup.okhttp3:okhttp:3.11.0'
    compile 'com.squareup.okhttp3:logging-interceptor:3.11.0'
    testCompile 'junit:junit:4.12'
    compile project(':base')
}
configurations.all {
    resolutionStrategy.eachDependency { DependencyResolveDetails details ->
        def requested = details.requested
        if (requested.group == 'com.android.support') {
            if (!requested.name.startsWith("multidex")) {
                details.useVersion '25.0.1'
            }
        }
    }
}

AndroidManifest.xml

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />

<application
    android:name=".app.App"

activity_main.xml

<com.hjm.bottomtabbar.BottomTabBar
    android:id="@+id/tab_var"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

MainActivity

public class MainActivity extends AppCompatActivity {

    private BottomTabBar tab_var;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //沉浸式状态栏
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            Window window = getWindow();
            window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            //隐藏ActionBar
            ActionBar actionBar = getSupportActionBar();
            actionBar.hide();
        }
        tab_var = (BottomTabBar) findViewById(R.id.tab_var);
        initView();
    }

    private void initView() {
        ImmersionBar.with(this).init();
        tab_var.init(getSupportFragmentManager())
                .setImgSize(50,50)
                .setFontSize(15)
                .setChangeColor(Color.RED,Color.GRAY)
                .addTabItem("首页",R.drawable.syn, Fragment1.class)
                .addTabItem("其它",R.drawable.myn, Fragment2.class);
    }
}

activity_fragment1.xml

<com.jcodecraeer.xrecyclerview.XRecyclerView
    android:id="@+id/shouye_rev"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

<RelativeLayout
    android:id="@+id/head_search_rr"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginBottom="10dp"
    android:layout_marginLeft="14.5dp"
    android:layout_marginTop="10dp">

    <LinearLayout
        android:id="@+id/head_ll"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal"
        android:orientation="vertical">

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/saoyisao" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="5.5dp"
            android:text="扫一扫"
            android:textSize="10sp" />
    </LinearLayout>


    <RelativeLayout
        android:id="@+id/head_rr"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@id/head_ll"
        android:layout_alignParentRight="true"
        android:layout_marginRight="15dp">

        <ImageView
            android:id="@+id/head_img_xiaoxi"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true"
            android:src="@drawable/xiaoxi" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/head_img_xiaoxi"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="5dp"
            android:text="消息"
            android:textSize="10sp" />


    </RelativeLayout>

    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@id/head_ll"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="14dp"
        android:layout_marginRight="13dp"
        android:layout_toLeftOf="@id/head_rr"
        android:layout_toRightOf="@id/head_ll"
        android:background="@drawable/sousuokuang">


        <ImageView
            android:id="@+id/head_img_sousuo"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_marginLeft="7dp"
            android:src="@drawable/sousuo" />

        <EditText
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_marginLeft="9dp"
            android:layout_toRightOf="@id/head_img_sousuo"
            android:background="@null"
            android:hint="阿斯顿马丁2016豪华限量版"
            android:textSize="14sp" />

    </RelativeLayout>
</RelativeLayout>

one_banner.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="200dp">

    <com.youth.banner.Banner
        android:id="@+id/banner"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>

one_class.xml

<?xml version="1.0" encoding="utf-8"?>
<HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/class_rev"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</HorizontalScrollView>

one_class_item.xml

扫描二维码关注公众号,回复: 3388521 查看本文章
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:padding="5dp">

    <com.facebook.drawee.view.SimpleDraweeView
        android:id="@+id/fei_img"
        android:layout_width="55dp"
        android:layout_height="55dp"
        android:layout_marginLeft="5dp"
        android:layout_marginRight="5dp"/>

    <TextView
        android:id="@+id/fei_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="10dp"
        android:layout_marginLeft="5dp"
        android:layout_marginRight="5dp" />
    
</LinearLayout>

one_miaosha.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <com.facebook.drawee.view.SimpleDraweeView
        android:id="@+id/miao_img"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:layout_gravity="center"/>

    <TextView
        android:id="@+id/miao_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>

one_miaosha_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <TextView
        android:id="@+id/miao_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#fff"/>

    <android.support.v7.widget.RecyclerView
        android:id="@+id/miao_rev"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

</LinearLayout>

one_miaosha_item2.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <TextView
        android:layout_width="50dp"
        android:background="#ccc"
        android:layout_height="50dp"
        android:text="京东秒杀"
        android:textSize="20dp"
        android:paddingLeft="2dp"/>

    <com.sunfusheng.marqueeview.MarqueeView
        android:id="@+id/marqueeView"
        android:layout_width="wrap_content"
        android:layout_gravity="center"
        android:layout_height="50dp"
        android:background="#ccc"/>

</LinearLayout>

one_tuijian.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <com.facebook.drawee.view.SimpleDraweeView
        android:id="@+id/tui_img"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:layout_gravity="center"/>

    <TextView
        android:id="@+id/tui_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>

one_tuijian_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TextView
        android:id="@+id/tui_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="20sp" />

    <android.support.v7.widget.RecyclerView
        android:id="@+id/tui_rev"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>

OneBean

https://www.zhaoapi.cn/home/getHome

App

public class App extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        Fresco.initialize(this);
    }
}

Api

public interface Api {
    @POST("home/getHome")
    Observable<OneBean> shouye();
}

Contants

public class Contants {
    public static final String BASE_RELEASE_URL = "http://www.zhaoapi.cn/";
}

Contract

public interface Contract {
    //Presenter
    abstract class Presenter extends BasePresenter<Model,View> {
        public abstract void slect();
        @Override
        public Model getmModel() {
            return new com.bwie.yuekao.shouye.model.Model();
        }
    }
    //model层接口
    interface Model extends IBaseModel {
        Observable<OneBean> slect();
    }
    //view层接口
    interface View extends IBaseView {
        void success(OneBean oneBean);
        void fail(String msg);
    }
}

Model

public class Model implements Contract.Model{
    @Override
    public Observable<OneBean> slect() {
        return RetrofitUtils.getInstance().createApi(Contants.BASE_RELEASE_URL, Api.class)
                .shouye().subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread());
    }
}

Presenter

public class Presenter extends Contract.Presenter {
    @Override
    public void slect() {
        mModel.slect().subscribe(new Consumer<OneBean>() {
            @Override
            public void accept(OneBean oneBean) throws Exception {
                mView.success(oneBean);
            }
        }, new Consumer<Throwable>() {
            @Override
            public void accept(Throwable throwable) throws Exception {
                mView.fail("网络有问题 ,请稍候再试");
            }
        });
    }
}

OneAdapter

public class OneAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{

    private Context context;
    private OneBean.DataBean data;
    private int one = 0;
    private int two = 1;
    private int tree = 2;
    private int four =3;
    private int five =4;
    private List<String> list;

    public OneAdapter(Context context, OneBean.DataBean data) {
            this.context = context;
            this.data = data;
            list = new ArrayList<>();
            for (int i = 0; i < data.getBanner().size(); i++) {
            list.add(data.getBanner().get(i).getIcon());
            }
            }

    @Override
    public int getItemViewType(int position) {
            if (position == 0) {
                return one;
            } else if (position == 1) {
                return two;
            }else if (position==2){
                return tree;
            }else if (position==3){
                return four;
            }
                return five;
    }

    @Override
    public long getItemId(int position) {
            return 5;
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            if (viewType == one) {
                View view = LayoutInflater.from(context).inflate(R.layout.one_banner, parent, false);
                return new BannerViewHolder(view);
            } else if (viewType == two) {
                View view = LayoutInflater.from(context).inflate(R.layout.one_class, parent, false);
                return new ClassHolder(view);
            } else if (viewType == tree) {
                View view = LayoutInflater.from(context).inflate(R.layout.one_miaosha_item2, parent, false);
                return new Miaosha2ViewHolder(view);
            } else if (viewType == four) {
                View view = LayoutInflater.from(context).inflate(R.layout.one_miaosha_item, parent, false);
                return new MiaoshaViewHolder(view);
            } else if(viewType==five) {
                View view = LayoutInflater.from(context).inflate(R.layout.one_tuijian_item, parent, false);
                return new TuijianViewHolder(view);
            }
            return null;
    }

    @Override
    public void onBindViewHolder(final RecyclerView.ViewHolder holder,final int position) {
            if (holder instanceof BannerViewHolder) {
                ((BannerViewHolder) holder).banner.setImages(list)
                    .setImageLoader(new bannerGlide())
                    .start();
            }
            if (holder instanceof ClassHolder) {
                OneClassAdapter classAdapter = new OneClassAdapter(context, data);
                ((ClassHolder) holder).class_rev.setAdapter(classAdapter);
            }
            if (holder instanceof MiaoshaViewHolder) {
                ((MiaoshaViewHolder) holder).miao_name.setText(data.getMiaosha().getName());
                OneMiaoShaAdapter miaoAdapter = new OneMiaoShaAdapter(context, data);
                ((MiaoshaViewHolder) holder).miao_rev.setAdapter(miaoAdapter);
            }
            if (holder instanceof TuijianViewHolder) {
                ((TuijianViewHolder) holder).tui_name.setText(data.getTuijian().getName());
                OneTuiJianAdapter tuiAdapter = new OneTuiJianAdapter(context, data);
                ((TuijianViewHolder) holder).tui_rev.setAdapter(tuiAdapter);
            }
            if(holder instanceof Miaosha2ViewHolder){
                List<String> info = new ArrayList<>();
                for (int i = 0; i < data.getMiaosha().getList().size(); i++) {
                    info.add( data.getMiaosha().getList().get(i).getTitle());

                }
                ((Miaosha2ViewHolder) holder).marqueeView.startWithList(info);
                ((Miaosha2ViewHolder) holder).marqueeView.startWithList(info, R.anim.anim_bottom_in, R.anim.anim_top_out);
            }
    }

    class bannerGlide extends ImageLoader {
        @Override
        public void displayImage(Context context, Object path, ImageView imageView) {
            Glide.with(context).load(path)
                    .placeholder(R.mipmap.ic_launcher)
                    .into(imageView);
        }
    }

        @Override
        public int getItemCount() {
            return list.size();
        }

    private class BannerViewHolder extends RecyclerView.ViewHolder {
        private Banner banner;

        public BannerViewHolder(View itemView) {
            super(itemView);
            banner = itemView.findViewById(R.id.banner);
        }
    }

    private class ClassHolder extends RecyclerView.ViewHolder {

        private RecyclerView class_rev;

        public ClassHolder(View itemView) {
            super(itemView);
            class_rev = itemView.findViewById(R.id.class_rev);
            class_rev.setLayoutManager(new GridLayoutManager(context, 10));
        }
    }

    private class MiaoshaViewHolder extends RecyclerView.ViewHolder {

        private TextView miao_name;
        private RecyclerView miao_rev;

        public MiaoshaViewHolder(View itemView) {
            super(itemView);
            miao_name = itemView.findViewById(R.id.miao_name);
            miao_rev = itemView.findViewById(R.id.miao_rev);
            miao_rev.setLayoutManager(new GridLayoutManager(context, 2));
        }
    }

    private class TuijianViewHolder extends RecyclerView.ViewHolder {

        private TextView tui_name;
        private RecyclerView tui_rev;

        public TuijianViewHolder(View itemView) {
            super(itemView);
            tui_name = itemView.findViewById(R.id.tui_name);
            tui_rev = itemView.findViewById(R.id.tui_rev);
            tui_rev.setLayoutManager(new GridLayoutManager(context, 2));
        }
    }

    private class Miaosha2ViewHolder extends RecyclerView.ViewHolder{

        private MarqueeView marqueeView;

        public Miaosha2ViewHolder(View itemView) {
            super(itemView);
            marqueeView = itemView.findViewById(R.id.marqueeView);
        }
    }
}

OneClassAdapter

public class OneClassAdapter extends RecyclerView.Adapter<OneClassAdapter.ClassViewHolder>{
    private Context context;
    private OneBean.DataBean data;
    private final List<OneBean.DataBean.FenleiBean> class_feilei;

    public OneClassAdapter(Context context, OneBean.DataBean data) {
        this.context = context;
        this.data = data;
        class_feilei = data.getFenlei();
    }

    @Override
    public ClassViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(context).inflate(R.layout.one_class_item, parent, false);
        return new ClassViewHolder(view);
    }

    @Override
    public void onBindViewHolder(ClassViewHolder holder, int position) {
        holder.fei_text.setText(class_feilei.get(position).getName());
        Uri uri = Uri.parse(class_feilei.get(position).getIcon());
        holder.fei_img.setImageURI(uri);
    }

    @Override
    public int getItemCount() {
        return class_feilei.size();
    }

    public class ClassViewHolder extends RecyclerView.ViewHolder {
        private SimpleDraweeView fei_img;
        private TextView fei_text;

        public ClassViewHolder(View itemView) {
            super(itemView);
            fei_img = itemView.findViewById(R.id.fei_img);
            fei_text = itemView.findViewById(R.id.fei_text);
        }
    }
}

OneMiaoShaAdapter

public class OneMiaoShaAdapter extends RecyclerView.Adapter<OneMiaoShaAdapter.MiaoViewHolder>{
    private Context context;
    private OneBean.DataBean data;
    private final List<OneBean.DataBean.MiaoshaBean.ListBean> list;

    public OneMiaoShaAdapter(Context context, OneBean.DataBean data) {
        this.context = context;
        this.data = data;
        list = data.getMiaosha().getList();
    }

    @Override
    public MiaoViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(context).inflate(R.layout.one_miaosha, parent, false);
        return new MiaoViewHolder(view);
    }

    @Override
    public void onBindViewHolder(MiaoViewHolder holder, int position) {
        holder.miao_text.setText(list.get(position).getTitle());
        Uri uri = Uri.parse(list.get(position).getImages().split("\\|")[0]);
        holder.miao_img.setImageURI(uri);
    }

    @Override
    public int getItemCount() {
        return list.size();
    }

    public class MiaoViewHolder extends RecyclerView.ViewHolder {

        private SimpleDraweeView miao_img;
        private TextView miao_text;

        public MiaoViewHolder(View itemView) {
            super(itemView);
            miao_img = itemView.findViewById(R.id.miao_img);
            miao_text = itemView.findViewById(R.id.miao_text);
        }
    }
}

OneTuiJianAdapter

public class OneTuiJianAdapter extends RecyclerView.Adapter<OneTuiJianAdapter.TuiViewHolder>{
    private Context context;
    private OneBean.DataBean data;
    private final List<OneBean.DataBean.TuijianBean.ListBeanX> list;

    public OneTuiJianAdapter(Context context, OneBean.DataBean data) {
        this.context = context;
        this.data = data;
        list = data.getTuijian().getList();
    }

    @Override
    public TuiViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(context).inflate(R.layout.one_tuijian, parent, false);
        return new TuiViewHolder(view);
    }

    @Override
    public void onBindViewHolder(TuiViewHolder holder, int position) {
        holder.tui_text.setText(list.get(position).getTitle());
        Uri uri = Uri.parse(list.get(position).getImages().split("\\|")[0]);
        holder.tui_img.setImageURI(uri);
    }

    @Override
    public int getItemCount() {
        return list.size();
    }

    public class TuiViewHolder extends RecyclerView.ViewHolder {

        private SimpleDraweeView tui_img;
        private TextView tui_text;

        public TuiViewHolder(View itemView) {
            super(itemView);
            tui_img = itemView.findViewById(R.id.tui_img);
            tui_text = itemView.findViewById(R.id.tui_text);
        }
    }
}

Fragment1

public class Fragment1 extends BaseMvpFragment<Contract.Model,Contract.Presenter> implements Contract.View {

    @BindView(R.id.shouye_rev)
    XRecyclerView shouye_rev;
    @BindView(R.id.head_search_rr)
    View searchView;
    private int mDistanceY = 0;
    private int page = 1;
    private OneAdapter oneAdapter;
    private Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            if(msg.what==0){
                shouye_rev.refreshComplete();
            }
        }
    };

    @Override
    protected int bindLayoutId() {
        return R.layout.activity_fragment1;
    }

    @Override
    protected void initData() {
        super.initData();
        shouye_rev.setLayoutManager(new LinearLayoutManager(getActivity()));
        shouye_rev.setLoadingMoreEnabled(true);
        shouye_rev.setLoadingListener(new XRecyclerView.LoadingListener() {

            @Override
            public void onRefresh() {
                page = 1;
                oneAdapter.notifyDataSetChanged();
                new Thread(){
                    @Override
                    public void run() {
                        super.run();
                        handler.sendEmptyMessageDelayed(0,2000);
                    }
                }.start();
            }

            @Override
            public void onLoadMore() {
                page += 1;
                oneAdapter.notifyDataSetChanged();
                handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        shouye_rev.loadMoreComplete();
                    }
                },2000);

            }
        });
        presenter.slect();
    }

    @Override
    public BasePresenter initPresenter() {
        return new Presenter();
    }

    @Override
    public void showLoading() {

    }

    @Override
    public void hideLoading() {

    }

    @Override
    public void success(OneBean oneBean) {
        oneAdapter = new OneAdapter(getActivity(), oneBean.getData());
        shouye_rev.setAdapter(oneAdapter);
    }

    @Override
    public void fail(String msg) {

    }
}

Fragment2

public class Fragment2 extends Fragment {

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = View.inflate(getActivity(),R.layout.activity_fragment2,null);
        return view;
    }
}

猜你喜欢

转载自blog.csdn.net/QQ849410011/article/details/82827653