RecommendFragment
package com.example.pingxixi.ui;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.os.Handler;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.bumptech.glide.Glide;
import com.example.pingxixi.MyApplication;
import com.example.pingxixi.R;
import com.example.pingxixi.SwipeRecyclerView;
import org.xutils.common.Callback;
import org.xutils.http.RequestParams;
import org.xutils.x;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class RecommendFragment extends Fragment {
private SwipeRecyclerView recyclerView;
private MyRecycleViewAdapter adapter;
//
private List<HashMap<String, Object>> list = new ArrayList<HashMap<String, Object>>();
private List<HashMap<String, Object>> mData = new ArrayList<HashMap<String, Object>>();
private int pageSize = 10;
String url = new MyApplication().selectbypageurl;
public static RecommendFragment newInstance() {
return new RecommendFragment();
}
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_recommend, container, false);
recyclerView = (SwipeRecyclerView) view.findViewById(R.id.swipeRecyclerView);
//set color
recyclerView.getSwipeRefreshLayout()
.setColorSchemeColors(getResources().getColor(R.color.black));
recyclerView.getRecyclerView().setLayoutManager(new GridLayoutManager(getActivity(), 1));
adapter=new MyRecycleViewAdapter();
recyclerView.setAdapter(adapter);
recyclerView.setOnLoadListener(new SwipeRecyclerView.OnLoadListener() {
@Override
public void onRefresh() {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
fetchRData();
}
}, 1000);
}
@Override
public void onLoadMore() {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
fetchMData();
}
}, 1000);
}
});
//设置自动下拉刷新,切记要在recyclerView.setOnLoadListener()之后调用
//因为在没有设置监听接口的情况下,setRefreshing(true),调用不到OnLoadListener
recyclerView.setRefreshing(true);
return view;
}
public void fetchMData() {
RequestParams params = new RequestParams(url);
//get
params.addQueryStringParameter("offset", String.valueOf(mData.size()));
params.addQueryStringParameter("pagesize", String.valueOf(pageSize));
x.http().get(params, new Callback.CommonCallback<String>() {
@Override
public void onSuccess(String result) {
Log.i("RecycleViewFragment", result);
list = JSON.parseObject(result,
new TypeReference<List<HashMap<String, Object>>>() {
});
mData.clear();
mData.addAll(list);
recyclerView.complete();
adapter.notifyDataSetChanged();
}
@Override
public void onError(Throwable ex, boolean isOnCallback) {
}
@Override
public void onCancelled(CancelledException cex) {
}
@Override
public void onFinished() {
}
});
}
public void fetchRData() {
RequestParams params = new RequestParams(url);
//get
params.addQueryStringParameter("offset", String.valueOf(0));
params.addQueryStringParameter("pagesize", String.valueOf(pageSize));
x.http().get(params, new Callback.CommonCallback<String>() {
@Override
public void onSuccess(String result) {
Log.i("RecycleViewFragment", result);
list = JSON.parseObject(result,
new TypeReference<List<HashMap<String, Object>>>() {
});
mData.clear();
mData.addAll(list);
recyclerView.complete();
adapter.notifyDataSetChanged();
}
@Override
public void onError(Throwable ex, boolean isOnCallback) {
Toast.makeText(getActivity(),ex.getMessage(),Toast.LENGTH_LONG);
}
@Override
public void onCancelled(CancelledException cex) {
}
@Override
public void onFinished() {
}
});
}
class MyRecycleViewAdapter extends RecyclerView.Adapter<MyRecycleViewAdapter.ViewHolder> {
public class ViewHolder extends RecyclerView.ViewHolder {
public ImageView img;
public TextView description;
public TextView goodname;
public TextView publishtime;
public ViewHolder(View convertView) {
super(convertView);
img = (ImageView) convertView.findViewById(R.id.img);
description = (TextView) convertView.findViewById(R.id.description);
goodname = (TextView) convertView.findViewById(R.id.goodname);
publishtime = (TextView) convertView.findViewById(R.id.publishtime);
}
}
@NonNull
@Override
public MyRecycleViewAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(getActivity()).inflate(R.layout.item, parent, false);
return new ViewHolder(v);
}
@Override
public void onBindViewHolder(@NonNull MyRecycleViewAdapter.ViewHolder holder, final int position) {
//picture
Glide.with(getActivity()).load(new MyApplication().imagebaseurl + mData.get(position).get("picture").toString()).placeholder(R.mipmap.ic_launcher).into(holder.img);
holder.description.setText((String) mData.get(position).get("description"));
holder.goodname.setText((String) mData.get(position).get("name")); //商品名称
holder.publishtime.setText((String) mData.get(position).get("publishtime"));
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
}
@Override
public int getItemCount() {
return mData == null ? 0 : mData.size();
}
}
}
fragment_recommend.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout 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=".ui.RecommendFragment">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<include layout="@layout/fragment_home"/>
<com.example.pingxixi.SwipeRecyclerView
android:id="@+id/swipeRecyclerView"
android:layout_width="402dp"
android:layout_height="464dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.94" />
</androidx.constraintlayout.widget.ConstraintLayout>
</FrameLayout>