Mvp+OkHttp+XRecyclerView------上拉加载下拉刷新
生活随笔
收集整理的這篇文章主要介紹了
Mvp+OkHttp+XRecyclerView------上拉加载下拉刷新
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
依賴
compile 'com.jcodecraeer:xrecyclerview:1.3.2'compile 'com.squareup.okhttp3:okhttp:3.9.0'compile 'com.github.bumptech.glide:glide:3.3.1'model層
CallBack
public interface CallBack {void onResponse(Object o);void onFailure(Exception e); }GsonUtils public class GsonUtils {private static Gson instance;private GsonUtils(){}public static Gson getInstance(){if (instance == null) {instance = new Gson();}return instance;} }HttpsUrl public class HttpsUrl {private Handler handler = new Handler();private static volatile HttpsUrl instance;public HttpsUrl(){}public static HttpsUrl getInstance(){if(null == instance){synchronized (HttpsUrl.class){if(instance==null){instance = new HttpsUrl();}}}return instance;}public void get(String url, Map<String , String> map, final CallBack callback, final Class cls){if(TextUtils.isEmpty(url)){return;}StringBuffer sb = new StringBuffer();sb.append(url);if(url.contains("?")){if (url.indexOf("?")==url.length()-1) {}else{sb.append("&");}}else{sb.append("?");}for(Map.Entry<String ,String > entry:map.entrySet()){sb.append(entry.getKey()).append("=").append(entry.getValue()).append("&");}if(sb.indexOf("&") != -1){sb.deleteCharAt(sb.lastIndexOf("&"));}OkHttpClient client = new OkHttpClient();final Request request = new Request.Builder().get().url(sb.toString()).build();Call call = client.newCall(request);call.enqueue(new okhttp3.Callback() {@Overridepublic void onFailure(Call call, final IOException e) {handler.post(new Runnable() {@Overridepublic void run() {callback.onFailure(e);}});}@Overridepublic void onResponse(Call call, Response response) throws IOException {final String s = response.body().string();Log.i("ddd",s);handler.post(new Runnable() {private Object o;@Overridepublic void run() {if(TextUtils.isEmpty(s)){o = null;}else{o = GsonUtils.getInstance().fromJson(s,cls);}callback.onResponse(o);}});}});} } presenter層INewsView
public interface INewsView {void failed(Exception e);void success(List<JsonBean.DataBean> data); }NewsListAdapter --------RecyclerView適配器 public class NewsListAdapter extends RecyclerView.Adapter<NewsListAdapter.ViewHolder> {private Context context;private List<JsonBean.DataBean> list;private View v;public NewsListAdapter(Context context, List<JsonBean.DataBean> list) {this.context=context;this.list=list;}@Overridepublic ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {v = View.inflate(context, R.layout.item_main, null);ViewHolder holder = new ViewHolder(v);return holder;}@Overridepublic void onBindViewHolder(ViewHolder holder, int position) {String img = list.get(position).getImages();if(img.contains("|")){img = img.substring(0, img.indexOf("|"));}Log.i("imggg",img);Glide.with(context).load(img).into(holder.t_img);holder.zjg.setText("折扣價:"+list.get(position).getSalenum());holder.jg.setText("原價:"+list.get(position).getPrice());holder.title.setText(""+list.get(position).getTitle());}@Overridepublic int getItemCount() {return list.size();}public class ViewHolder extends RecyclerView.ViewHolder {private final ImageView t_img;private final TextView jg;private final TextView title;private final TextView zjg;public ViewHolder(View itemView) {super(itemView);t_img = v.findViewById(R.id.iv_timgg);jg = v.findViewById(R.id.tv_tjiage);zjg = v.findViewById(R.id.tv_zjiage);title = v.findViewById(R.id.tv_ttitle);jg.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG);}} }NewsPresenter public class NewsPresenter {private INewsView inv;public NewsPresenter(INewsView inv) {this.inv = inv;}public void getNews(int num){HashMap<String , String> map = new HashMap<>();map.put("source","android");map.put("keywords","筆記本");map.put("page",num+"");HttpsUrl.getInstance().get("http://120.27.23.105/product/searchProducts", map, new CallBack() {@Overridepublic void onResponse(Object o) {JsonBean json = (JsonBean) o;if(json!=null){List<JsonBean.DataBean> data = json.getData();Log.i("jjj",data.toString());inv.success(data);}}@Overridepublic void onFailure(Exception e) {inv.failed(e);}},JsonBean.class);}public void detachView(){if (inv != null) {inv = null;}} } MainActivity public class MainActivity extends AppCompatActivity implements INewsView {private List<JsonBean.DataBean> list = new ArrayList<>();private XRecyclerView rv;private NewsListAdapter adapter;private int num =1;private boolean aa=true;private boolean flag = true;private ImageView img;private NewsPresenter presenter;private EditText et;private Button butss;private String s;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();presenter = new NewsPresenter(this);presenter.getNews(num);LinearLayoutManager manager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);rv.setLayoutManager(manager);adapter = new NewsListAdapter(this, list);rv.setAdapter(adapter);initLoading();}private void initLoading() {rv.setLoadingMoreEnabled(true);rv.setLoadingMoreProgressStyle(ProgressStyle.SquareSpin);rv.setLoadingListener(new XRecyclerView.LoadingListener() {@Overridepublic void onRefresh() {num=1;aa=true;presenter.getNews(num);}@Overridepublic void onLoadMore() {num++;aa=false;presenter.getNews(num);}});}private void initView() {rv = (XRecyclerView) findViewById(R.id.rv);img = (ImageView) findViewById(R.id.iv_img);et = (EditText) findViewById(R.id.et);butss = (Button) findViewById(R.id.but_ss);butss.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {s = et.getText().toString();Log.i("sss",s);if(s.equals("筆記本")){Toast.makeText(MainActivity.this,s,Toast.LENGTH_LONG).show();}else if(s.equals("手機")){Toast.makeText(MainActivity.this,s,Toast.LENGTH_LONG).show();}else{Toast.makeText(MainActivity.this,"沒有該數據",Toast.LENGTH_LONG).show();}}});img.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {if (flag) {img.setImageResource(R.drawable.kind_grid);StaggeredGridLayoutManager managera = new StaggeredGridLayoutManager(2, LinearLayoutManager.VERTICAL);rv.setLayoutManager(managera);flag=false;} else {img.setImageResource(R.drawable.kind_liner);LinearLayoutManager anager = new LinearLayoutManager(MainActivity.this, LinearLayoutManager.VERTICAL, false);rv.setLayoutManager(anager);flag=true;}}});}@Overridepublic void failed(Exception e) {}@Overridepublic void success(List<JsonBean.DataBean> data) {if (aa) {rv.refreshComplete();}else {rv.loadMoreComplete();}Log.i("zzz",data.toString());if(null!=data){list.clear();list.addAll(data);adapter.notifyDataSetChanged();}} }main布局 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:text="搜索商品"android:layout_centerVertical="true"android:layout_centerHorizontal="true" /><ImageViewandroid:id="@+id/iv_img"android:layout_width="50dp"android:layout_height="50dp"android:src="@drawable/kind_liner"android:layout_alignParentTop="true"android:layout_alignParentEnd="true" /></RelativeLayout><TextViewandroid:layout_width="match_parent"android:layout_height="2dp"android:background="#000"/><LinearLayoutandroid:orientation="horizontal"android:layout_width="match_parent"android:layout_height="wrap_content"><EditTextandroid:id="@+id/et"android:layout_width="0dp"android:layout_weight="4"android:hint="請輸入關鍵字"android:layout_height="wrap_content"android:layout_gravity="center"android:layout_alignParentStart="true" /><Buttonandroid:id="@+id/but_ss"android:layout_width="0dp"android:layout_weight="1"android:layout_height="wrap_content"android:layout_alignParentEnd="true"android:layout_alignParentTop="true"android:text="搜索" /></LinearLayout><TextViewandroid:layout_width="match_parent"android:layout_height="2dp"android:background="#000"/><com.jcodecraeer.xrecyclerview.XRecyclerViewandroid:id="@+id/rv"android:layout_width="match_parent"android:layout_height="wrap_content"></com.jcodecraeer.xrecyclerview.XRecyclerView> </LinearLayout>item_main適配器布局 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"><ImageViewandroid:id="@+id/iv_timgg"android:layout_width="200dp"android:layout_height="200dp" /><TextViewandroid:id="@+id/tv_ttitle"android:layout_width="wrap_content"android:layout_height="wrap_content"android:ellipsize="end"android:maxEms="30"android:singleLine="true"android:text="wqewqeqeq" /><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"><TextViewandroid:id="@+id/tv_tjiage"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentLeft="true"android:layout_alignParentStart="true"android:layout_centerVertical="true"android:text="qweqeqeqw"android:textSize="18dp" /><TextViewandroid:id="@+id/tv_zjiage"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="1232321"android:textColor="#f00"android:textSize="18dp"android:layout_alignParentTop="true"android:layout_toEndOf="@+id/tv_tjiage"android:layout_marginStart="33dp" /></RelativeLayout></LinearLayout></LinearLayout>總結
以上是生活随笔為你收集整理的Mvp+OkHttp+XRecyclerView------上拉加载下拉刷新的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 程序员转行后都怎么样了,分享我身边的真实
- 下一篇: 简单搜索框的制作