此文章使用了mvp模式
model层的utils里面有一个bean,是自己的封装类
presenter层的basepersenter类和Mainpersenter类
view类里面有activity包、adapter包、iview包和application包
在此bean类就不写了
Basepersenter类
public class Basepersenter <T extends IMvpview> { private T imvpview; public T getImvpview() { return imvpview; } public void setImvpview(T imvpview) { this.imvpview = imvpview; } }
Mainpersenter类
public class Mainpersenter extends Basepersenter<Maininterface> { //获得缓存的数据 public void getCacheData(int index){ String url="http://www.93.gov.cn/93app/data.do?channelId=0&&startNum="+index; MyUtils.httpCacheGet(url, MainBean.class, new MyUtils.UtilsInterface() { @Override public <T> void CallBack(T mclass) { getImvpview().CallBack_Pulldata((MainBean) mclass); } }); } //获得网络数据 public void getData(int index) { String url="http://www.93.gov.cn/93app/data.do?channelId=0&&startNum="+index; MyUtils.httpGet(url, MainBean.class, new MyUtils.UtilsInterface() { @Override public <T> void CallBack(T mclass) { getImvpview().CallBack_Pulldata((MainBean) mclass); } }); } public void refreshData(int index) { String url="http://www.93.gov.cn/93app/data.do?channelId=0&&startNum="+index; MyUtils.httpGet(url, MainBean.class, new MyUtils.UtilsInterface() { @Override public <T> void CallBack(T mclass) { getImvpview().CallBack_Freshdata((MainBean) mclass); } }); } public void setImagview(ImageView imagview,String url) { MyUtils.setImag(imagview,url); } }
view层的activity包里的Mainactivity类
public class MainActivity extends AppCompatActivity implements Maininterface,XListView.IXListViewListener { private XListView list_view; private Mainpersenter mainpersenter; private MyPullAdapter myPullAdapter; private int index=0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //进行网络判断,没有网络则跳转到设置 ConnectivityManager systemService = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE); NetworkInfo activeNetworkInfo = systemService.getActiveNetworkInfo(); if (activeNetworkInfo!=null && activeNetworkInfo.isConnected()){ Toast.makeText(this, "网络可用", Toast.LENGTH_SHORT).show(); }else{ AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setMessage("当前没有网络连接,点击确定前往设置"); builder.setTitle("提醒"); //确定按钮 builder.setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Intent intent=new Intent(); intent.setClassName("com.android.settings", "com.android.settings.Settings"); startActivity(intent); } }); //取消按钮 builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }); builder.show(); } //初始化控件 initView(); //初始化数据 initData(); } private void initData() { //实例化v层对应的p层对象MainPersenter mainpersenter = new Mainpersenter(); //将本层的引用传过去 mainpersenter.setImvpview(this); //获得缓存的网络数据 mainpersenter.getCacheData(0); //把p层对象传给适配器,从而可以获得图片数据 myPullAdapter.setMainpersenter(mainpersenter); } private void initView() { list_view = (XListView) findViewById(R.id.list_view); //设置监听 list_view.setXListViewListener(this); //设置可加载更多,默认就可一刷新 list_view.setPullLoadEnable(true); //实例化适配器对象 myPullAdapter = new MyPullAdapter(this); list_view.setAdapter(myPullAdapter); } //加载更多数据时的回掉方法 @Override public void CallBack_Pulldata(MainBean mainbean) { List<MainBean.DataBean> data = mainbean.getData(); //给适配器传递数据 myPullAdapter.setData(data); //刷新适配器 myPullAdapter.notifyDataSetChanged(); } //刷新数据时的回掉方法 @Override public void CallBack_Freshdata(MainBean mainbean) { List<MainBean.DataBean> data = mainbean.getData(); myPullAdapter.refreshData(data); myPullAdapter.notifyDataSetChanged(); } //xlistview监听的刷新 @Override public void onRefresh() { //此变量是url的参数之一,就是请求的数据起始角标 //每次返回的数据是19条,所以第一次的角标是0;第二次就是20,,,以此类推 index=index+20; mainpersenter.refreshData(index); list_view.stopRefresh(true); } //xlistview监听的加载更多 @Override public void onLoadMore() { //此变量是url的参数之一,就是请求的数据起始角标 //每次返回的数据是19条,所以第一次的角标是0;第二次就是20,,,以此类推 index=index+20; mainpersenter.getData(index); list_view.stopLoadMore(); } }
view层的adapter包里的MypullAdapter类
public class MyPullAdapter extends BaseAdapter { private final Context mcontext; private ArrayList<MainBean.DataBean> data =new ArrayList<>(); private ViewHolder viewHolder; private Mainpersenter mainpersenter; public MyPullAdapter(Context mainActivity) { this.mcontext = mainActivity; } @Override public int getCount() { return data.size(); } @Override public Object getItem(int position) { return data.get(position).getTITLE(); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = View.inflate(mcontext, R.layout.list_item, null); viewHolder = new ViewHolder(); viewHolder.textView= (TextView) convertView.findViewById(R.id.text_my); viewHolder.imageView= (ImageView) convertView.findViewById(R.id.imag_); convertView.setTag(viewHolder); }else{ viewHolder= (ViewHolder) convertView.getTag(); } viewHolder.textView.setText(getItem(position).toString()); mainpersenter.setImagview(viewHolder.imageView,data.get(position).getIMAGEURL()); return convertView; } //加载更多,直接将将新数据添加到集合中 public void setData(List<MainBean.DataBean> data) { if (data != null) { this.data.addAll(data); } } //刷新数据,先将原先集合的数据清空,再将新数据添加到集合中 public void refreshData(List<MainBean.DataBean> data) { if (data != null) { this.data.clear(); this.data.addAll(data); } } //此方法就是把mainpersenter的引用传递过来 public void setMainpersenter(Mainpersenter mainpersenter) { this.mainpersenter=mainpersenter; } private class ViewHolder{ TextView textView; ImageView imageView; } }
view层的iview包里的IMvpView类,,什么都没有
public interface IMvpview {
}
view层的iview包里的Maininterface类,
public interface Maininterface extends IMvpview{ //加载更多时的回掉方法 void CallBack_Pulldata(MainBean mainbean); //刷新数据的回掉方法 void CallBack_Freshdata(MainBean mainbean); }