ListActivity
package com.example.a1512qjd.ui.activity; import android.content.Intent; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.LinearLayoutManager; import com.example.a1512qjd.R; import com.example.a1512qjd.bean.ProductsBean; import com.example.a1512qjd.presenter.ProductsPresenterImp; import com.example.a1512qjd.ui.adapter.XrvListAdapter; import com.example.a1512qjd.ui.inter.ProductsView; import com.jcodecraeer.xrecyclerview.XRecyclerView; import java.util.ArrayList; import java.util.List; public class ListActivity extends AppCompatActivity implements ProductsView { private XRecyclerView mXrv; private ProductsPresenterImp productsPresenterImp; private int pscid; private boolean isRefresh = true; private XrvListAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_list); initView(); //获取pscid Intent intent = getIntent(); pscid = intent.getIntExtra("pscid", 0); //绑定 productsPresenterImp = new ProductsPresenterImp(this); productsPresenterImp.getProducts(pscid + ""); } @Override protected void onDestroy() { super.onDestroy(); productsPresenterImp.detach(); } @Override public void showData(final List<ProductsBean.DataBean> list) { final List<ProductsBean.DataBean> tempList = new ArrayList<>(); tempList.addAll(list); //创建适配器 if (isRefresh) { adapter = new XrvListAdapter(this, list); mXrv.setAdapter(adapter); adapter.refresh(tempList); mXrv.refreshComplete();//设置刷新完成 } else { if (adapter != null) { //判断适配器是否创建过 adapter.loadMore(tempList); mXrv.loadMoreComplete();//设置加载更多完成 } } if (adapter == null) { return; } adapter.setOnListItemClickListener(new XrvListAdapter.OnListItemClickListener() { @Override public void OnItemClick(ProductsBean.DataBean dataBean) { Intent intent = new Intent(ListActivity.this, ListDetailsActivity.class); intent.putExtra("bean", dataBean); startActivity(intent); } }); } private void initView() { mXrv = (XRecyclerView) findViewById(R.id.xrv); //设置布局管理器 LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this); mXrv.setLayoutManager(linearLayoutManager); //设置刷新和加载更多监听 mXrv.setLoadingListener(new XRecyclerView.LoadingListener() { @Override public void onRefresh() { //刷新 isRefresh = true; productsPresenterImp.getProducts(pscid + ""); } @Override public void onLoadMore() { //加载更多 isRefresh = false; productsPresenterImp.getProducts(pscid + ""); } }); }
}
activty_list.xml
<?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=".ui.activity.ListActivity"> <LinearLayout android:layout_width="match_parent" android:layout_height="50dp" android:background="#ff3660" android:gravity="center_vertical" android:orientation="horizontal"> <ImageView android:id="@+id/ivZxing" android:layout_width="30dp" android:layout_height="30dp" android:layout_marginLeft="15dp" android:background="@drawable/a_s"/> <LinearLayout android:layout_width="match_parent" android:layout_height="30dp" android:layout_marginLeft="15dp" android:layout_marginRight="15dp" android:layout_weight="1" android:background="@drawable/shape_search"></LinearLayout> <ImageView android:layout_width="30dp" android:layout_height="30dp" android:layout_alignParentRight="true" android:layout_marginRight="15dp" android:background="@drawable/my_msg_bai"/> </LinearLayout> <com.jcodecraeer.xrecyclerview.XRecyclerView android:id="@+id/xrv" android:layout_width="match_parent" android:layout_height="match_parent"></com.jcodecraeer.xrecyclerview.XRecyclerView> </LinearLayout>
ProductsModel
package com.example.a1512qjd.model.inter; import com.example.a1512qjd.net.OnNetListener; public interface ProductsModel { void getProducts(String pscid, OnNetListener onNetListener); void getProducts(String pscid, String page, String sort, OnNetListener onNetListener); }
ProductsModelImp
package com.example.a1512qjd.model; import com.example.a1512qjd.bean.ProductsBean; import com.example.a1512qjd.model.inter.ProductsModel; import com.example.a1512qjd.net.Api; import com.example.a1512qjd.net.OkhttpUtils; import com.example.a1512qjd.net.OnNetListener; import com.google.gson.Gson; import java.util.HashMap; import java.util.Map; public class ProductsModelImp implements ProductsModel { @Override public void getProducts(String pscid, final OnNetListener onNetListener) { Map<String, String> params = new HashMap<>(); params.put("pscid", pscid); OkhttpUtils.getInstance().doPost(Api.PRODUCTS_URL, params, new OnNetListener() { @Override public void onSuccess(String result) { ProductsBean productsBean = new Gson().fromJson(result, ProductsBean.class); if ("0".equals(productsBean.getCode())) { onNetListener.onSuccess(result); } } @Override public void onFailed(Exception e) { onNetListener.onFailed(e); } }); } @Override public void getProducts(String pscid, String page, String sort, OnNetListener onNetListener) { }
}
ProductsView
package com.example.a1512qjd.ui.inter; import com.example.a1512qjd.bean.ProductsBean; import java.util.List; public interface ProductsView { void showData(List<ProductsBean.DataBean> list); }
ProductsPresenter
package com.example.a1512qjd.presenter.inter; public interface ProductsPresenter { void getProducts(String pscid);
}
ProductsPresenterImp
package com.example.a1512qjd.presenter; import com.example.a1512qjd.bean.ProductsBean; import com.example.a1512qjd.model.ProductsModelImp; import com.example.a1512qjd.net.OnNetListener; import com.example.a1512qjd.presenter.inter.ProductsPresenter; import com.example.a1512qjd.ui.inter.ProductsView; import com.google.gson.Gson; public class ProductsPresenterImp implements ProductsPresenter { private ProductsView view; private final ProductsModelImp productsModelImp; public ProductsPresenterImp(ProductsView view) { this.view = view; productsModelImp = new ProductsModelImp(); } @Override public void getProducts(String pscid) { productsModelImp.getProducts(pscid, new OnNetListener() { @Override public void onSuccess(String result) { if (view != null) { ProductsBean productsBean = new Gson().fromJson(result, ProductsBean.class); view.showData(productsBean.getData()); } } @Override public void onFailed(Exception e) { } }); } public void detach() { if (view != null) { view = null; } } }
XrvListAdapter
package com.example.a1512qjd.ui.adapter; import android.content.Context; import android.support.annotation.NonNull; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import com.bumptech.glide.Glide; import com.example.a1512qjd.R; import com.example.a1512qjd.bean.ProductsBean; import java.util.List; public class XrvListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { private Context context; private List<ProductsBean.DataBean> list; private LayoutInflater inflater; private OnListItemClickListener onListItemClickListener; public interface OnListItemClickListener { void OnItemClick(ProductsBean.DataBean dataBean); } public XrvListAdapter(Context context, List<ProductsBean.DataBean> list) { this.context = context; this.list = list; inflater = LayoutInflater.from(context); } public void setOnListItemClickListener(OnListItemClickListener onListItemClickListener) { this.onListItemClickListener = onListItemClickListener; } @NonNull @Override public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = inflater.inflate(R.layout.rvlist_item, parent, false); XlvViewHolder xlvViewHolder = new XlvViewHolder(view); return xlvViewHolder; } @Override public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, final int position) { XlvViewHolder xlvViewHolder = (XlvViewHolder) holder; final ProductsBean.DataBean dataBean = list.get(position); String imgUrl = dataBean.getImages().split("\\|")[0]; Glide.with(context).load(imgUrl).into(xlvViewHolder.iv); xlvViewHolder.tvTitle.setText(dataBean.getTitle()); xlvViewHolder.tvPrice.setText("¥" + dataBean.getBargainPrice() + ""); //设置条目监听 xlvViewHolder.ll.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (onListItemClickListener != null) { onListItemClickListener.OnItemClick(dataBean); } } }); } @Override public int getItemCount() { return list.size(); } class XlvViewHolder extends RecyclerView.ViewHolder { private final LinearLayout ll; private final ImageView iv; private final TextView tvTitle; private final TextView tvPrice; public XlvViewHolder(View itemView) { super(itemView); ll = itemView.findViewById(R.id.ll); iv = itemView.findViewById(R.id.iv); tvTitle = itemView.findViewById(R.id.tvTitle); tvPrice = itemView.findViewById(R.id.tvPrice); } } /** * 刷新 * * @param templist */ public void refresh(List<ProductsBean.DataBean> templist) { this.list.clear(); this.list.addAll(templist); notifyDataSetChanged(); } /** * 加载更多 * * @param list */ public void loadMore(List<ProductsBean.DataBean> list) { this.list.addAll(list); notifyDataSetChanged(); }
}
rvlist_item
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/ll" android:layout_width="match_parent" android:layout_height="100dp" android:orientation="horizontal"> <ImageView android:id="@+id/iv" android:layout_width="70dp" android:layout_height="70dp"/> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:orientation="vertical"> <TextView android:id="@+id/tvTitle" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <TextView android:id="@+id/tvPrice" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="5dp" android:textColor="#ff0000"/> </LinearLayout>
</LinearLayout>