//MainActivity
public class MainActivity extends AppCompatActivity
implements View.OnClickListener, DataCall<List<Goods>> ,
XRecyclerView.LoadingListener,
MyAdapter.MyInterface {
private ImageView sou;
private Button bt;
private EditText et;
String url="http://www.zhaoapi.cn/product/searchProducts?keywords=手机&page=1";
List<Goods> list = new ArrayList<>();
int page=1;
int sort=0;
boolean a=true;
private GridAdapter gridAdapter;
private GridLayoutManager gridLayoutManager;
private MyAdapter myAdapter;
private LinearLayoutManager linearLayoutManager;
private XRecyclerView xrv;
private ListPersenter listPersenter;
String urls=url+page+"&sort="+sort;
private String trim;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sou = findViewById(R.id.sou);
bt = findViewById(R.id.bt);
et = findViewById(R.id.et);
xrv = findViewById(R.id.xrv);
bt.setOnClickListener(this);
sou.setOnClickListener(this);
listPersenter = new ListPersenter(this);
listPersenter.get(url);
xrv.setLoadingListener(this);
myAdapter = new MyAdapter(this, list);
linearLayoutManager = new LinearLayoutManager(this);
xrv.setLayoutManager(linearLayoutManager);
xrv.setAdapter(myAdapter);
xrv.refresh();
myAdapter.setOnclick(this);
}
@Override
public void success(List<Goods> goods) {
xrv.loadMoreComplete();
xrv.refreshComplete();
list.addAll(goods);
myAdapter.notifyDataSetChanged();
// gridAdapter.notifyDataSetChanged();
}
@Override
public void fail(Result result) {
Toast.makeText(MainActivity.this,"失败",Toast.LENGTH_LONG).show();
}
@Override
public void onRefresh() {
listPersenter.get(url);
}
@Override
public void onLoadMore() {
listPersenter.get(url);
}
@Override
public void onClick(View v) {
Toast.makeText(this, "哈哈哈", Toast.LENGTH_SHORT).show();
switch (v.getId()){
case R.id.sou:
list.clear();
trim = et.getText().toString().trim();
page=1;
sort=0;
url = "http://www.zhaoapi.cn/product/searchProducts?keywords="+ trim +"&page=";
String urls=url+page+"&sort="+sort;
listPersenter.get(urls);
break;
case R.id.bt:
if (a){
gridAdapter = new GridAdapter(MainActivity.this,list);
gridLayoutManager = new GridLayoutManager(MainActivity.this,2);
xrv.setLayoutManager(gridLayoutManager);
xrv.setAdapter(gridAdapter);
a=false;
}else {
// adapter = new ListAdapter(MainActivity.this,list);
myAdapter = new MyAdapter(this, list);
linearLayoutManager = new LinearLayoutManager(MainActivity.this);
xrv.setLayoutManager(linearLayoutManager);
xrv.setAdapter(myAdapter);
a=true;
}
break;
}
}
@Override
public void onClick(Goods goods) {
Intent intent = new Intent(this, TwoActivity.class);
intent.putExtra("url", goods.getDetailUrl());
startActivity(intent);
}
}
//布局
<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="wrap_content"
android:orientation="vertical"
tools:context=".activity.MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageView
android:id="@+id/sou"
android:layout_width="50dp"
android:layout_height="50dp"
android:src="@mipmap/ic_launcher"/>
<EditText
android:id="@+id/et"
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="搜索"/>
<Button
android:id="@+id/bt"
android:layout_width="50dp"
android:layout_height="wrap_content"
android:text="田"/>
</LinearLayout>
<com.jcodecraeer.xrecyclerview.XRecyclerView
android:id="@+id/xrv"
android:layout_width="match_parent"
android:layout_height="match_parent">
</com.jcodecraeer.xrecyclerview.XRecyclerView>
</LinearLayout>
//线性适配器
public class MyAdapter extends XRecyclerView.Adapter<MyAdapter.MyViewHolder> {
private Context context;
private List<Goods> list;
private MyInterface myInterface;
public void setOnclick(MyInterface un) {
this.myInterface = un;
}
public interface MyInterface{
void onClick(Goods goods);
}
public MyAdapter(Context context, List<Goods> list) {
this.context = context;
this.list = list;
}
@NonNull
@Override
public MyAdapter.MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = View.inflate(context, R.layout.item1,null);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull final MyAdapter.MyViewHolder myViewHolder, final int i) {
myViewHolder.tv1.setText(list.get(i).getTitle());
myViewHolder.tv2.setText("¥"+list.get(i).getPrice()+"");
String images = list.get(i).getImages();
String[] split = images.split("\\|");
Glide.with(context).load(split[0]).into(myViewHolder.iv1);
final Goods goods = list.get(i);
// 点击跳转
myViewHolder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
myInterface.onClick(goods);
// context.startActivity(new Intent(context,WebActivity.class));
}
});
myViewHolder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(myViewHolder.itemView, "alpha", 1, 0);
objectAnimator.setInterpolator(new AccelerateInterpolator());
objectAnimator.setDuration(1000);
objectAnimator.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
}
@Override
public void onAnimationEnd(Animator animation) {
list.remove(i);
notifyDataSetChanged();
}
@Override
public void onAnimationCancel(Animator animation) {
list.remove(i);
notifyDataSetChanged();
}
@Override
public void onAnimationRepeat(Animator animation) {
}
});
objectAnimator.start();
return true;
}
});
}
@Override
public int getItemCount() {
return list.size();
}
public static class MyViewHolder extends RecyclerView.ViewHolder {
private final ImageView iv1;
private final TextView tv1;
private final TextView tv2;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
iv1 = itemView.findViewById(R.id.iv1);
tv1 = itemView.findViewById(R.id.tv1);
tv2 = itemView.findViewById(R.id.tv2);
}
}
}
//网格适配器
public class GridAdapter extends XRecyclerView.Adapter<GridAdapter.MyViewHolder> {
private Context context;
private List<Goods> list;
public GridAdapter(Context context, List<Goods> list) {
this.context = context;
this.list = list;
}
@NonNull
@Override
public GridAdapter.MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = View.inflate(context, R.layout.item2,null);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull GridAdapter.MyViewHolder myViewHolder, int i) {
myViewHolder.tv1.setText(list.get(i).getTitle());
myViewHolder.tv2.setText("¥"+list.get(i).getPrice()+"");
String images = list.get(i).getImages();
String[] split = images.split("\\|");
Glide.with(context).load(split[0]).into(myViewHolder.iv1);
}
@Override
public int getItemCount() {
return list.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder {
private final ImageView iv1;
private final TextView tv1;
private final TextView tv2;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
iv1 = itemView.findViewById(R.id.iv1);
tv1 = itemView.findViewById(R.id.tv1);
tv2 = itemView.findViewById(R.id.tv2);
}
}
}
//接口
public interface DataCall<T> {
void success(T t);
void fail(Result result);
}
public interface GoodsInterface<T> {
void success(T data);
void fail(Result result);
}
//OkHttpClient请求数据
public class Utils {
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 "";
}
}
//MVP M层代码
public class ListModle {
public static Result get(String url) {
String s = Utils.get(url);
Type type = new TypeToken<Result<List<Goods>>>() {
}.getType();
Gson gson = new Gson();
Result result = gson.fromJson(s, type);
return result;
}
}
P层代码
public class ListPersenter {
private DataCall dataCall;
public ListPersenter(DataCall dataCall) {
this.dataCall = dataCall;
}
Handler handler = new Handler(Looper.getMainLooper()){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
Result result = (Result) msg.obj;
if (result.getCode().equals("0")){
dataCall.success(result.getData());
}else {
dataCall.fail(result);
}
}
};
public void get(final String url){
new Thread(new Runnable() {
@Override
public void run() {
Result result = ListModle.get(url);
Message message = handler.obtainMessage();
message.obj=result;
handler.sendMessage(message);
}
}).start();
}
}
//跳转到详情页面
public class TwoActivity extends AppCompatActivity {
private WebView web;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_two);
web = findViewById(R.id.web);
WebSettings settings = web.getSettings();
settings.setJavaScriptEnabled(true);
settings.setJavaScriptCanOpenWindowsAutomatically(true);
// 得到url
String url = getIntent().getStringExtra("url");
// 将网址改为http
String replace = url.replace("https", "http");
web.loadUrl(replace);//使用WebView加载
web.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return false;
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
return false;
}
});
//
web.setWebChromeClient(new WebChromeClient());
}
}
//TwoActivity布局
<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=".activity.TwoActivity">
<WebView
android:id="@+id/web"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>