仿京东商品列表---两种布局 用recycleview仿京东商品列表---两种布局 用recycleview



view层里mainactivity--------------------------------------------------------------


package com.example.com.linmeihui20180330.view;

import android.animation.ObjectAnimator;
import android.annotation.SuppressLint;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.StaggeredGridLayoutManager;
import android.view.View;
import android.widget.ImageView;
import android.widget.ListView;

import com.example.com.linmeihui20180330.R;

import java.util.List;

import adapter.MyAdapter;
import bean.Beandata;
import presenter.MyDataPresenter;

public class MainActivity extends AppCompatActivity implements DataView {


    private String url="https://www.zhaoapi.cn/product/getProducts?pscid=2";
@SuppressLint("HandlerLeak")
private Handler handler=new Handler(){
    @Override
    public void handleMessage(Message msg) {
        super.handleMessage(msg);

        List<Beandata.DataBean> list = (List<Beandata.DataBean>) msg.obj;


        MyAdapter myAdapter = new MyAdapter(MainActivity.this, list);
        rec.setAdapter(myAdapter);

    }
};
    private RecyclerView rec;
    private int i=0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        rec = findViewById(R.id.rec);
        final ImageView image=findViewById(R.id.image);

        MyDataPresenter presenter = new MyDataPresenter(this);
        presenter.netWork(url);
        rec.setLayoutManager(new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false));

        image.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                i++;
                if (i%2==0){
                    rec.setLayoutManager(new LinearLayoutManager(MainActivity.this,LinearLayoutManager.VERTICAL,false));
                }else {
                    rec.setLayoutManager(new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL));
                }


                ObjectAnimator objectAnimator=ObjectAnimator.ofFloat(image,"rotation",0f,180f);
                objectAnimator.setDuration(500);
                objectAnimator.start();
            }
        });
    }

    @Override
    public void toBackHome(List<Beandata.DataBean> list) {
        Message msg = new Message();
        msg.obj= list;

        handler.sendMessage(msg);
    }
}

dataview-----------------------------------------------------------------------------------------------------------------

package com.example.com.linmeihui20180330.view;

import java.util.List;

import bean.Beandata;

/**
 * Created by linmeihui on 2018/3/30.
 */

public interface DataView {
    void toBackHome(List<Beandata.DataBean> list);
}



moudle层 datamoudle------------------------------------------------------------------------------------------------

package com.example.com.linmeihui20180330.view;

import java.util.List;

import bean.Beandata;

/**
 * Created by linmeihui on 2018/3/30.
 */

public interface DataView {
    void toBackHome(List<Beandata.DataBean> list);
}


mydatamoudle--------------------------------------------------------------------------------------------

package moudle;

import com.google.gson.Gson;

import java.io.IOException;
import java.util.List;

import Utils.OkhtttpUtils;
import bean.Beandata;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Response;
import presenter.DataPresenter;

/**
 * Created by linmeihui on 2018/3/30.
 */

public class MyDataMoudle implements DataMoudle {
    @Override
    public void getData(String url, final DataPresenter dataPresenter) {

        OkhtttpUtils.doGet(url, new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {

            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {

                String json = response.body().string();

                Gson gson = new Gson();

                Beandata beandata = gson.fromJson(json, Beandata.class);

                List<Beandata.DataBean> list=beandata.getData();

                dataPresenter.success(list);

            }
        });
    }
}


presenter层datapresenter------------------------------------------------------------------------------------------------------

package presenter;

import java.util.List;

import bean.Beandata;

/**
 * Created by linmeihui on 2018/3/30.
 */

public interface DataPresenter {
    void success(List<Beandata.DataBean> list);
    void eroor();
}



mydatapresenter-----------------------------------------------------------------------------------------------------------

package presenter;

import com.example.com.linmeihui20180330.view.DataView;

import java.util.List;

import bean.Beandata;
import moudle.DataMoudle;
import moudle.MyDataMoudle;

/**
 * Created by linmeihui on 2018/3/30.
 */

public class MyDataPresenter implements DataPresenter {

    private final MyDataMoudle myDataMoudle;
    DataView dataView;

    public  MyDataPresenter(DataView dataView){
        this.dataView = dataView;
        myDataMoudle = new MyDataMoudle();
    }

    @Override
    public void success(List<Beandata.DataBean> list) {
            dataView.toBackHome(list);
    }

    @Override
    public void eroor() {

    }

    public void netWork(String url) {

        myDataMoudle.getData(url,this);


    }
}


 

utils工具类---------------------------------------------------------------------------------------------------------------

package Utils;

import android.os.Environment;

import java.io.File;
import java.util.Map;
import java.util.concurrent.TimeUnit;

import okhttp3.Cache;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;

import static android.R.string.ok;
import static android.os.Build.VERSION_CODES.M;

/**
 * Created by Administrator on 2018/3/8.
 */

public class OkhtttpUtils {



    //单例模式,把构造方法进行私有化
    //
    private OkhtttpUtils(){};
    static  OkHttpClient client;


    public static OkHttpClient getInstance(){


        if (client==null) {
            //更加安全
            synchronized (OkhtttpUtils.class) {
                //缓存的地方     mnt/sdcard
                File file = new File(Environment.getExternalStorageDirectory(), "cache11");
                client = new OkHttpClient().newBuilder()
                        .readTimeout(3000, TimeUnit.SECONDS)   //设置读取超时时间
                        .connectTimeout(3000, TimeUnit.SECONDS) //设置连接的超时时间

                        .cache(new Cache(file, 10 * 1024))
                        .build();
            }
        }
        return client;
    }


    /**
     * get请求
     * Callback  是一个接口
     */
    public static void doGet(String url, Callback callback){

        //1:拿到okhttpclient  对像

        OkHttpClient client = getInstance();
        //2:进行请求的操作

        Request request = new Request.Builder()
                .url(url)
                .build();
        client.newCall(request).enqueue(callback);


    }

    //post请求

    /**
     *
     * @param url  请求的地址
     * @param parms   请求的参数
     * @param callback  callback
     */
    public static void doPost(String url, Map<String,String> parms,Callback callback){

        //得到客户端的对像
        OkHttpClient client = getInstance();

        //不是FormBody,而是一个Builder
        FormBody.Builder body = new FormBody.Builder();
        //key   value
        for (String key:parms.keySet()){
            //value的值
            body.add(key,parms.get(key));
        }
        Request request = new Request.Builder()
                .url(url)
                .post(body.build())
                .build();

        client.newCall(request).enqueue(callback);

    }

    //用来上传图片的

    //url  , 图片  ,参数    Callback
    public static  void upImage(String url,File file,String filenName,Map<String,String> params,Callback callback){

        OkHttpClient client = getInstance();


        //requestBody的实现类  Formbody
        MultipartBody.Builder builder = new MultipartBody.Builder();

        if (params!=null){
            for (String key :params.keySet()){
                builder.addFormDataPart(key,params.get(key));
            }
        }

        //设置类型
        builder.setType(MultipartBody.FORM);


        builder.addFormDataPart("file",filenName,RequestBody.create(MediaType.parse("application/octet-stream"),file));

      // builder.setType(MultipartBody.FORM);
     // builder.addFormDataPart("file",filenName,RequestBody.create(MediaType.parse("application/octet-stream"),file));
        //builder.addFormDataPart("file","aa.png",builder.build());

        Request request = new Request.Builder()
                .url(url)
                .post(builder.build())
                .build();

        client.newCall(request).enqueue(callback);


    }


}



myadapter-------------------------------------------------------------------------------------------------------------------


package adapter;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.bumptech.glide.Glide;
import com.example.com.linmeihui20180330.R;
import com.example.com.linmeihui20180330.view.MainActivity;

import java.util.List;

import bean.Beandata;

/**
 * Created by linmeihui on 2018/3/30.
 */

public class MyAdapter extends RecyclerView.Adapter{
    private String url = "https://m.360buyimg.com/n0/jfs/t7441/10/64242474/419246/adb30a7d/598e95fbNd989ba0a.jpg!q70.jpg";

    Context context;
    List<Beandata.DataBean> list;
    public MyAdapter(Context context, List<Beandata.DataBean> list) {
        this.context=context;
        this.list=list;
    }


    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

       View view = View.inflate(parent.getContext(),R.layout.item,null);

        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {

        ViewHolder viewHolder= (ViewHolder) holder;
        viewHolder.tv1.setText(list.get(position).getTitle());
        viewHolder.tv2.setText(list.get(position).getPrice()+"");
        Glide.with(context).load(url).into(viewHolder.img);

    }

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

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


    class ViewHolder extends RecyclerView.ViewHolder{
        ImageView img;
        TextView tv1,tv2;

        public ViewHolder(View itemView) {
            super(itemView);
            img=itemView.findViewById(R.id.img);
            tv2=itemView.findViewById(R.id.tv2);
            tv1=itemView.findViewById(R.id.tv1);
        }
    }
}



布局*******************************************************************************************************

<?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"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.com.linmeihui20180330.view.MainActivity">
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    >
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="综合"
        android:layout_marginTop="20dp"
        android:layout_marginLeft="40dp"
        />
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="销量"
    android:layout_marginLeft="90dp"
    android:layout_marginTop="20dp"/>
<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/icon"
    android:layout_marginTop="20dp"
    android:id="@+id/image"
    android:layout_marginLeft="140dp"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="30dp"
        android:layout_marginTop="20dp"
        android:text="筛选"/>
</LinearLayout>
<android.support.v7.widget.RecyclerView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/rec">

</android.support.v7.widget.RecyclerView>
</LinearLayout>


子布局***************************************************************************************************

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
<ImageView
    android:layout_width="100dp"
    android:layout_height="100dp"
    android:id="@+id/img"
    android:layout_margin="20dp"/>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@id/img"
        android:id="@+id/tv1"
        android:layout_marginTop="40dp"/>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@id/img"
        android:id="@+id/tv2"
        android:layout_marginTop="60dp"/>
</RelativeLayout>


依赖++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

compile 'com.google.code.gson:gson:2.2.4'
compile 'com.squareup.okhttp3:okhttp:3.10.0'
compile 'com.github.bumptech.glide:glide:3.7.0'
compile 'com.android.support:recyclerview-v7:26.1.0'



相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-10-03
  • 2022-12-23
  • 2022-12-23
  • 2021-07-15
  • 2022-12-23
  • 2022-01-20
猜你喜欢
  • 2022-01-20
  • 2022-12-23
  • 2021-11-01
  • 2022-12-23
  • 2022-01-05
  • 2022-12-23
  • 2021-05-19
相关资源
相似解决方案