仿京东商品列表---两种布局 用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'
相关文章推荐
- Android高仿京东淘宝商品列表布局切换效果
- 使用RecycleView加载不同的布局(类似淘宝京东购物车+推荐商品列表)
- 点击切换商品两种不同布局列表
- android:高仿京东商品属性筛选(流式布局)
- 分析京东“搜索京东商品/店铺”布局(三)
- Python爬虫实战(2):爬取京东商品列表
- Android仿京东App购物车 二级列表+全选反选+Ok封装+拦截器+结算+商品数量计算
- Python爬虫实战(2):爬取京东商品列表
- 仿京东商品列表页码提示效果
- Python爬虫实战(2):爬取京东商品列表
- 商品列表和商品条目的布局,和简单的动画
- Android仿京东App购物车 二级列表+全选反选+Ok封装+拦截器+结算+商品数量计算
- 代码: 仿淘宝商品详情页左上,图片鼠标浮上去,图片部分区域放大 (页面布局:图片列表)
- [置顶] 仿天猫App实现商品列表布局切换效果
- 分析京东“搜索京东商品/店铺”布局(一)
- Android仿淘宝切换商品列表布局效果的示例代码
- 第二本第六章第4题京东商品分类列表页面
- 分析京东“搜索京东商品/店铺”布局(二)
- iOS纵横列表切换(京东,淘宝商品展示页)
- Python批量获取京东商品列表信息