//清单文件
<uses-permission android:name="android.permission.INTERNET" />
//应用依赖
implementation 'com.google.code.gson:gson:2.8.5'
implementation 'com.github.bumptech.glide:glide:4.8.0'
implementation 'com.android.support:recyclerview-v7:28.0.0'
implementation('com.jcodecraeer:xrecyclerview:1.5.9') {
exclude group: 'com.android.support'
}
//布局
<?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"
tools:context=".MainActivity"
android:orientation="vertical"
android:padding="10dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageView
android:id="@+id/mSou"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:src="@drawable/sousuo"/>
<EditText
android:id="@+id/mET"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:layout_weight="15"
android:hint="搜索" />
<ImageView
android:id="@+id/mQie"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:src="@drawable/wangge"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/mBt1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="综合"/>
<Button
android:id="@+id/mBt2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="销量"/>
<Button
android:id="@+id/mBt3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="价格"/>
<Button
android:id="@+id/mBt4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="筛选"/>
</LinearLayout>
<com.jcodecraeer.xrecyclerview.XRecyclerView
android:id="@+id/mXRV"
android:layout_width="match_parent"
android:layout_height="match_parent">
</com.jcodecraeer.xrecyclerview.XRecyclerView>
</LinearLayout>
//MainACctivity层
package com.example.nuli;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;
import com.example.nuli.adapter.GridAdapter;
import com.example.nuli.adapter.ListAdapter;
import com.example.nuli.bean.Goods;
import com.example.nuli.bean.Result;
import com.example.nuli.core.CallBacks;
import com.example.nuli.presenter.ListPresenter;
import com.jcodecraeer.xrecyclerview.XRecyclerView;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity implements CallBacks<List<Goods>> {
private Button button1,button2,button3,button4;
String url = "http://www.zhaoapi.cn/product/searchProducts?keywords=手机&page=";
private EditText met;
private XRecyclerView xrecyclerview;
private ImageView image1,image2;
List<Goods> list = new ArrayList<>();
int page=1;
int sort=0;
//判断布局
boolean a=true;
private ListPresenter listPresenter;
private ListAdapter adapter;
private GridAdapter gridAdapter;
private LinearLayoutManager linearLayoutManager;
private String trim="手机";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取控件
button1 = findViewById(R.id.mBt1);
button2 = findViewById(R.id.mBt2);
button3 = findViewById(R.id.mBt3);
button4 = findViewById(R.id.mBt4);
image1 = findViewById(R.id.mSou);
image2 = findViewById(R.id.mQie);
met = findViewById(R.id.mET);
xrecyclerview = findViewById(R.id.mXRV);
//presenter层
listPresenter = new ListPresenter(this);
String urls=url+page+"&sort="+sort;
listPresenter.add(urls);
//线性adapter
adapter = new ListAdapter(MainActivity.this,list);
linearLayoutManager = new LinearLayoutManager(this);
xrecyclerview.setLayoutManager(linearLayoutManager);
gridAdapter = new GridAdapter(MainActivity.this,list);
xrecyclerview.setAdapter(adapter);
//搜索按钮
image1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
list.clear();
trim = met.getText().toString().trim();
page=1;
sort=0;
url = "http://www.zhaoapi.cn/product/searchProducts?keywords="+ trim +"&page=";
String urls=url+page+"&sort="+sort;
listPresenter.add(urls);
}
});
//设置刷新
xrecyclerview.setLoadingListener(new XRecyclerView.LoadingListener() {
@Override
public void onRefresh() {
page=1;
String urls=url+page+"&sort="+sort;
list.clear();
listPresenter.add(urls);
}
@Override
public void onLoadMore() {
page++;
String urls=url+page+"&sort="+sort;
listPresenter.add(urls);
}
});
//价格
button3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
list.clear();
page=1;
sort=2;
url = "http://www.zhaoapi.cn/product/searchProducts?keywords="+trim+"&page=";
String urls=url+page+"&sort="+sort;
listPresenter.add(urls);
}
});
//销量
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
list.clear();
page=1;
sort=1;
url = "http://www.zhaoapi.cn/product/searchProducts?keywords="+trim+"&page=";
String urls=url+page+"&sort="+sort;
listPresenter.add(urls);
}
});
//切换
image2.setOnClickListener(new View.OnClickListener() {
private GridLayoutManager gridLayoutManager;
@Override
public void onClick(View v) {
if (a){
gridAdapter = new GridAdapter(MainActivity.this,list);
gridLayoutManager = new GridLayoutManager(MainActivity.this,2);
xrecyclerview.setLayoutManager(gridLayoutManager);
xrecyclerview.setAdapter(gridAdapter);
a=false;
}else {
adapter = new ListAdapter(MainActivity.this,list);
linearLayoutManager = new LinearLayoutManager(MainActivity.this);
xrecyclerview.setLayoutManager(linearLayoutManager);
xrecyclerview.setAdapter(adapter);
a=true;
}
}
});
}
//成功
@Override
public void success(List<Goods> goods) {
list.addAll(goods);
adapter.notifyDataSetChanged();
xrecyclerview.loadMoreComplete();
xrecyclerview.refreshComplete();
gridAdapter.notifyDataSetChanged();
//删除条目调用接口
adapter.setOnItmeClickListener(new ListAdapter.ClickListener() {
@Override
public void onItmeClickListener(View view, int position) {
list.remove(position);
adapter.notifyDataSetChanged();
}
});
}
//失败
@Override
public void fail(Result result) {
Toast.makeText(MainActivity.this,"失败",Toast.LENGTH_LONG).show();
}
}
//Presenter层
package com.example.nuli.presenter;
import android.os.Handler;
import android.os.Message;
import com.example.nuli.MainActivity;
import com.example.nuli.bean.Result;
import com.example.nuli.core.CallBacks;
import com.example.nuli.model.ListModel;
public class ListPresenter {
CallBacks callBacks;
public ListPresenter(CallBacks callBacks) {
this.callBacks=callBacks;
}
Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
Result result = (Result) msg.obj;
if (result.getCode()==0){
callBacks.success(result.getData());
}else {
callBacks.fail(result);
}
}
};
public void add(final String url) {
new Thread(new Runnable() {
@Override
public void run() {
Result result = ListModel.getGoods(url);
Message message = handler.obtainMessage();
message.obj=result;
handler.sendMessage(message);
}
}).start();
}
}
//Model层
package com.example.nuli.model;
import com.example.nuli.bean.Goods;
import com.example.nuli.bean.Result;
import com.example.nuli.utils.OkHttp;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.util.List;
public class ListModel {
public static Result getGoods(String url){
String s = OkHttp.get(url);
Type type = new TypeToken<Result<List<Goods>>>() {}.getType();
Gson gson = new Gson();
Result result = gson.fromJson(s, type);
return result;
}
}
//线性Adapter
package com.example.nuli.adapter;
import android.app.Activity;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.bumptech.glide.Glide;
import com.example.nuli.MainActivity;
import com.example.nuli.R;
import com.example.nuli.bean.Goods;
import java.util.List;
public class ListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{
private Activity activity;
private List<Goods> list;
//删除监听
private ClickListener clickListener;
public ListAdapter(MainActivity activity, List<Goods> list) {
this.activity=activity;
this.list=list;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view =View.inflate(activity,R.layout.item_01,null);
return new MyHolder(view);
}
@Override
public void onBindViewHolder(@NonNull final RecyclerView.ViewHolder viewHolder, final int i) {
final MyHolder holder1 = (MyHolder) viewHolder;
holder1.text1.setText(list.get(i).getTitle());
holder1.text2.setText("¥"+list.get(i).getPrice());
String images = list.get(i).getImages();
String[] split = images.split("\\|");
Glide.with(activity).load(split[0]).into(holder1.image);
viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(activity,"点击了",Toast.LENGTH_LONG).show();
clickListener.onItmeClickListener(v,i);
}
});
}
@Override
public int getItemCount() {
return list.size();
}
public class MyHolder extends RecyclerView.ViewHolder{
private final ImageView image;
private final TextView text1,text2;
public MyHolder(@NonNull View itemView) {
super(itemView);
image = itemView.findViewById(R.id.mIV1);
text1 = itemView.findViewById(R.id.textview1);
text2 = itemView.findViewById(R.id.textview2);
}
}
//监听接口
public interface ClickListener{
void onItmeClickListener(View view,int position);
}
public void setOnItmeClickListener(ClickListener clickListener){
this.clickListener = clickListener;
}
}
//网格Adapter
package com.example.nuli.adapter;
import android.app.Activity;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.bumptech.glide.Glide;
import com.example.nuli.MainActivity;
import com.example.nuli.R;
import com.example.nuli.bean.Goods;
import java.util.List;
public class GridAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{
private Activity activity;
private List<Goods> list;
public GridAdapter(MainActivity activity, List<Goods> list) {
this.activity = activity;
this.list=list;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view =View.inflate(activity, R.layout.item_02,null);
return new MyHolder(view);
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) {
MyHolder myHolder =(MyHolder) viewHolder;
myHolder.text3.setText(list.get(i).getTitle());
myHolder.text4.setText("¥"+list.get(i).getPrice());
String images = list.get(i).getImages();
String[] split = images.split("\\|");
Glide.with(activity).load(split[0]).into(myHolder.imageView);
}
@Override
public int getItemCount() {
return list.size();
}
class MyHolder extends RecyclerView.ViewHolder{
private final ImageView imageView;
private final TextView text3,text4;
public MyHolder(@NonNull View itemView) {
super(itemView);
imageView = itemView.findViewById(R.id.image2);
text3 = itemView.findViewById(R.id.textview3);
text4 = itemView.findViewById(R.id.textview4);
}
}
}
//OKHTTP
package com.example.nuli.utils;
import java.io.IOException;
import okhttp3.Call;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
public class OkHttp {
public static String get(String url) {
OkHttpClient okHttpClient = new OkHttpClient();
Request request = new Request.Builder().url(url).build();
Call call = okHttpClient.newCall(request);
try {
Response execute = call.execute();
return execute.body().string();
} catch (IOException e) {
e.printStackTrace();
}
return url;
}
}
小小效果