您的位置:首页 > 其它

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

2018-03-31 16:06 99 查看




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'
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: