您的位置:首页 > 其它

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);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: