Mvp模式--xlistview上拉加载下拉刷新——桃先森_
2017-05-22 08:07
411 查看
此文章使用了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);
}
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);
}
相关文章推荐
- MVP模式 + RecyclerView瀑布流 + 上拉加载、下拉刷新
- listView下拉刷新加载数据
- Android学习笔记:ListView上拉加载下拉刷新升级版:滑动tab结合listView数据刷新
- listview下拉刷新 上拉(滑动分页)加载更多
- android ListView的上部下拉刷新下部点击加载更多具体实现及拓展
- ListView的下拉刷新,点击加载更多
- LISTVIEW虚模式之加载/更新/删除/排序
- android listview 下拉刷新以及加载更多
- android ListView的上部下拉刷新下部点击加载更多具体实现及拓展
- listview下拉刷新 上拉(滑动分页)加载更多
- listview 下拉刷新,上拉加载更多
- Android 下拉刷新,上拉加载更多控件--支持ListView,GridView和ScrollView
- Android ListView下拉刷新点击加载更多 推荐
- android ListView的上部下拉刷新下部点击加载更多具体实现及拓展
- listview下拉刷新 上拉(滑动分页)加载更多
- Android学习笔记:ListView上拉加载,下拉刷新的实现
- Android ListView 下拉刷新 上拉加载
- ListView瀑布流(下拉刷新,上拉加载)
- Android UI--自定义ListView(实现下拉刷新+加载更多)
- 下拉刷新及滚动到底部加载更多的Listview使用