一.http
1.HttpConfig
public class HttpConfig { public static String goods_url ="http://www.93.gov.cn/93app/data.do"; }
2.OkLoadListener
public interface OkLoadListener { void okLoadSuccess(String json); void okLoadError(String error); }
二.model
1.GoodsListener
public interface GoodsListener { void getSuccess(String json); void getError(String error); }
2.IModel
public interface IModel { void getGoodsListData(String url, Map<String,String> map, GoodsListener goodsListener); }
3.ModelImpl
public class ModelImpl implements IModel{
@Override
public void getGoodsListData(String url, Map<String, String> map, final GoodsListener goodsListener) {
HttpUtils httpUtils = HttpUtils.getHttpUtils();
httpUtils.okPost(url,map);
httpUtils.setOkLoadListener(new OkLoadListener() {
@Override
public void okLoadSuccess(String json) {
goodsListener.getSuccess(json);
}
@Override
public void okLoadError(String error) {
goodsListener.getError(error);
}
});
}
}
三.presenter
1.IPresenter
public interface IPresenter { void showGoodsListToView(IModel iModel, IMainView iMainView); }
2.PresenterImpl
public class PresenterImpl implements IPresenter{
private static final String TAG = "PresenterImpl-----";
@Override
public void showGoodsListToView(IModel iModel, final IMainView iMainView) {
Map<String,String> map = new HashMap<>();
map.put("channelId",iMainView.getContent()+"");
map.put("startNum","0");
iModel.getGoodsListData(HttpConfig.goods_url, map, new GoodsListener() {
@Override
public void getSuccess(String json) {
Log.d(TAG, "getSuccess: "+json);
Gson gson = new Gson();
UserBean userBean = gson.fromJson(json, UserBean.class);
List<UserBean.DataBean> data = userBean.getData();
iMainView.showGoodsList(data);
}
@Override
public void getError(String error) {
Log.d(TAG, "getError: "+error);
}
});
}
}
四.view
1.IMainView
public interface IMainView { void showGoodsList(List<UserBean.DataBean> list); int getContent(); }
2.MainActivity
public class MainActivity extends AppCompatActivity implements IMainView{ private XRecyclerView xre; private PresenterImpl presenter; private int page = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); initData(); } private void initData() { presenter = new PresenterImpl(); presenter.showGoodsListToView(new ModelImpl(),this); } private void initView() { xre = (XRecyclerView)findViewById(R.id.xRecyclerView); LinearLayoutManager lin = new LinearLayoutManager(this); xre.setLayoutManager(lin); xre.setLoadingListener(new XRecyclerView.LoadingListener() { @Override public void onRefresh() { initData(); xre.refreshComplete(); Toast.makeText(MainActivity.this,"page"+"-------",Toast.LENGTH_SHORT).show(); } @Override public void onLoadMore() { page++; initData(); xre.loadMoreComplete(); Toast.makeText(MainActivity.this,page+"-------",Toast.LENGTH_SHORT).show(); } }); //xre.setPullRefreshEnabled(true); xre.setLoadingMoreEnabled(true); } @Override public void showGoodsList(List<UserBean.DataBean> list) { MyAdapter myAdapter = new MyAdapter(this,list); xre.setAdapter(myAdapter); } @Override public int getContent() { int s =page; return s; } }2.5 主方法对应的布局
<android.support.constraint.ConstraintLayout android:layout_width="match_parent" android:layout_height="match_parent">
<com.jcodecraeer.xrecyclerview.XRecyclerView android:id="@+id/xRecyclerView" android:layout_width="match_parent" android:layout_height="wrap_content"></com.jcodecraeer.xrecyclerview.XRecyclerView></android.support.constraint.ConstraintLayout>
3.MyAdapter (适配器)
public class MyAdapter extends XRecyclerView.Adapter<MyAdapter.MyViewHolder>{ private Context context; private List<UserBean.DataBean> list; public MyAdapter(Context context, List<UserBean.DataBean> list) { this.context = context; this.list = list; } @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(context).inflate(R.layout.item_layout, parent, false); MyViewHolder myViewHolder = new MyViewHolder(view); return myViewHolder; } @Override public void onBindViewHolder(final MyViewHolder holder, int position) { Glide.with(context).load(list.get(position).getIMAGEURL()).into(holder.getImageView()); holder.getTitle().setText(list.get(position).getTITLE()); //长按删除 holder.itemView.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { AlertDialog.Builder builder = new AlertDialog.Builder(context); builder.setTitle("删除"); builder.setNegativeButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { //得到下标 int pos = holder.getLayoutPosition(); System.out.println("pos----"+pos); list.remove(pos); //notifyDataSetChanged(); notifyItemRemoved(pos);//局部删除当前view并局部刷新 } }); builder.setNeutralButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { } }); builder.show(); return true; } }); } @Override public int getItemCount() { return list.size(); } class MyViewHolder extends XRecyclerView.ViewHolder{ private TextView title; private ImageView imageView; public MyViewHolder(View itemView) { super(itemView); imageView = (ImageView) itemView.findViewById(R.id.tu); title = (TextView) itemView.findViewById(R.id.title); } public MyViewHolder(View itemView, TextView title, ImageView imageView) { super(itemView); this.title = title; this.imageView = imageView; } public TextView getTitle() { return title; } public void setTitle(TextView title) { this.title = title; } public ImageView getImageView() { return imageView; } public void setImageView(ImageView imageView) { this.imageView = imageView; } } }
3.5 item_layout
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/title"/> <ImageView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/tu"/> </LinearLayout>
五.权限
compile 'com.squareup.okhttp3:okhttp:3.10.0' compile 'com.github.bumptech.glide:glide:4.7.1' compile 'com.google.code.gson:gson:2.8.4' compile 'com.jcodecraeer:xrecyclerview:1.5.9'
configurations.all { resolutionStrategy.eachDependency { DependencyResolveDetails details -> def requested = details.requested if (requested.group == 'com.android.support') { if (!requested.name.startsWith("multidex")) { details.useVersion '25.2.0' } } }}
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission> <uses-permission android:name="android.permission.INTERNET"/>