mvp_greendao_recyclerview_fresco_retrofit2_butterknife_eventbus_ViewPage

来源:互联网 发布:淘宝宝贝拍照灯光选择 编辑:程序博客网 时间:2024/05/29 20:01

主Activity

public class MainActivity extends FragmentActivity {    @BindView(R.id.vp_home)    ViewPager vpHome;    @BindView(R.id.rb1)    RadioButton rb1;    @BindView(R.id.rb2)    RadioButton rb2;    @BindView(R.id.rb3)    RadioButton rb3;    @BindView(R.id.rb4)    RadioButton rb4;    @BindView(R.id.rb5)    RadioButton rb5;    @BindView(R.id.rg)    RadioGroup rg;List<Fragment> list;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        ButterKnife.bind(this);        intiData();        MyFragmentApdata myFragmentApdata = new MyFragmentApdata(getSupportFragmentManager());        vpHome.setAdapter(myFragmentApdata);        //给RadioGroup设置监听事件        rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {            @Override            public void onCheckedChanged(RadioGroup radioGroup, int i) {                switch (i) {                    case R.id.rb1:                        vpHome.setCurrentItem(0);                        break;                    case R.id.rb2:                        vpHome.setCurrentItem(1);                        break;                    case R.id.rb3:                        vpHome.setCurrentItem(2);                        break;                    case R.id.rb4:                        vpHome.setCurrentItem(3);                        break;                    case R.id.rb5:                        vpHome.setCurrentItem(4);                        break;                }            }        });    }    private void intiData() {        list = new ArrayList<>();        list.add(new Fragment_one());        list.add(new Fragment_two());        list.add(new Fragment_three());        list.add(new Fragment_frou());        list.add(new Fragment_file());    }    //Fragment适配器    class MyFragmentApdata extends FragmentPagerAdapter {        public MyFragmentApdata(FragmentManager fm) {            super(fm);        }        @Override        public Fragment getItem(int position) {            return list.get(position);        }        @Override        public int getCount() {            return list.size();        }    }    //判断网络是否可用    public static boolean isNetworkAvailable(Context context) {        ConnectivityManager connectivity = (ConnectivityManager) context                .getSystemService(Context.CONNECTIVITY_SERVICE);        if (connectivity != null) {            NetworkInfo info = connectivity.getActiveNetworkInfo();            if (info != null && info.isConnected())            {                // 当前网络是连接的                if (info.getState() == NetworkInfo.State.CONNECTED)                {                    // 当前所连接的网络可用                    EventBus.getDefault().postSticky(new MessageEvent("当前所连接的网络可用"));                    return true;                }            }        }        EventBus.getDefault().postSticky(new MessageEvent("网络不可用"));        return false;    }}
主布局

<android.support.v4.view.ViewPager    android:id="@+id/vp_home"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:layout_alignParentStart="true"    android:layout_alignParentTop="true"></android.support.v4.view.ViewPager><RadioGroup    android:id="@+id/rg"    android:layout_width="match_parent"    android:layout_height="50dp"    android:orientation="horizontal"    android:layout_alignParentBottom="true"    >  <RadioButton      android:id="@+id/rb1"      android:gravity="center"      android:layout_width="0dp"      android:layout_height="wrap_content"      android:layout_weight="1"      android:button="@null"      android:textSize="20dp"        android:text="首页"      tools:ignore="HardcodedText,SpUsage" />  <RadioButton      android:id="@+id/rb2"      android:layout_width="0dp"      android:layout_height="match_parent"      android:layout_weight="1"      android:textSize="20dp"      android:button="@null"      android:gravity="center"      android:text="想法"      tools:ignore="HardcodedText,SpUsage"      />  <RadioButton      android:id="@+id/rb3"      android:layout_width="0dp"      android:layout_height="match_parent"      android:layout_weight="1"      android:text="市场"      android:textSize="20dp"      android:button="@null"      android:gravity="center"      tools:ignore="HardcodedText,SpUsage"      />  <RadioButton      android:id="@+id/rb4"      android:layout_width="0dp"      android:layout_height="match_parent"      android:layout_weight="1"      android:text="通知"      android:textSize="20dp"      tools:ignore="HardcodedText,SpUsage"      android:button="@null"      android:gravity="center"      />  <RadioButton      android:id="@+id/rb5"      android:layout_width="0dp"      android:layout_height="match_parent"      android:layout_weight="1"      android:textSize="20dp"      tools:ignore="HardcodedText,SpUsage"      android:button="@null"      android:gravity="center"      android:text="更多"      /></RadioGroup>
这是Fragment_one

public class Fragment_one extends Fragment implements Xl_View {    @BindView(R.id.rcv)    RecyclerView rcv;    Unbinder unbinder;    MainPrenter mainPrenter;  //p层的 实体类    FragmentApdata pagerAdapter; //适配器    @Nullable    @Override    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {        View view = View.inflate(getActivity(), R.layout.fragment_one, null);        unbinder = ButterKnife.bind(this, view);        EventBus.getDefault().register(this);        mainPrenter = new MainPrenter(this);        isNetworkAvailable(getActivity());        //mainPrenter.post();//这里是post请求  这两个请求只可以存在一个        mainPrenter.get();//这里是get请求        List<ResultsBean> list =  App.daoSession.getResultsBeanDao().loadAll();        for (ResultsBean beans : list){            System.out.println(beans.toString());            Log.e("========",beans.toString());        }        return view;    }    @Override    public void Suucer(NewsBean bean) {        //布局管理器        LinearLayoutManager manager = new LinearLayoutManager(getActivity(),LinearLayoutManager.VERTICAL,false);        pagerAdapter = new FragmentApdata(getActivity(),bean);        //设置布局管理器        rcv.setLayoutManager(manager);        //绑定适配器        rcv.setAdapter(pagerAdapter);    }    @Override    public void Datch(Exception e) {    }    @Subscribe(threadMode = ThreadMode.MAIN,sticky = true)    public void onMoonEvent(MessageEvent messageEvent){        Toast.makeText(getActivity(),messageEvent.getMessage(),Toast.LENGTH_SHORT).show();    }    @Override    public void onDestroyView() {        super.onDestroyView();        unbinder.unbind();    }    //内存泄漏    @Override    public void onDestroy() {        super.onDestroy();        //解绑        mainPrenter.data();        //调用        EventBus.getDefault().unregister(this);    }}
Fragment_one布局

<?xml version="1.0" encoding="utf-8"?><LinearLayout    xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"   ><android.support.v7.widget.RecyclerView    android:id="@+id/rcv"    android:layout_width="match_parent"    android:layout_height="match_parent"></android.support.v7.widget.RecyclerView></LinearLayout>
View层

public interface Xl_View {    void  Suucer(NewsBean bean);    void  Datch(Exception e);}
Modle层

public interface MianModleIn {    void  Suucer(NewsBean bean);    void  Datch(Exception e);}
Modle类

public class MainModle  {    //Modle层 自己定义的GET请求的方法    public  void  getData(final MianModleIn mianModleIn){        //这是网络请求 用的是Modle层的接口 调用的事get请求 597b4f9dcb50e051fd725a9ec54d6653这是请求体的key        Call<NewsBean> call = App.iGetDataBase.get();        //这里是异步请求 效率高  重写了两个方法 一个成功 一个失败        call.enqueue(new Callback<NewsBean>() {            //成功的方法 成功了就把NewsBean的对象传过去            @Override            public void onResponse(Call<NewsBean> call, Response<NewsBean> response) {                NewsBean bean = response.body();                mianModleIn.Suucer(bean);                //这是向数据库插入数据的操作                App.daoSession.getResultsBeanDao().insertInTx(bean.getResults());            }            //失败了就传空            @Override            public void onFailure(Call<NewsBean> call, Throwable t) {                mianModleIn.Datch(new Exception(""));            }        });    }    //Modle层 自己定义的GET请求的方法    public  void  getPost(final MianModleIn mianModleIn){        //这是网络请求 用的是Modle层的接口 调用的事get请求 597b4f9dcb50e051fd725a9ec54d6653这是请求体的key        Call<NewsBean> call = App.iGetDataBase.post();        //这里是异步请求 效率高  重写了两个方法 一个成功 一个失败        call.enqueue(new Callback<NewsBean>() {            //成功的方法 成功了就把NewsBean的对象传过去            @Override            public void onResponse(Call<NewsBean> call, Response<NewsBean> response) {                NewsBean bean = response.body();                mianModleIn.Suucer(bean);                //这是向数据库插入数据的操作                App.daoSession.getResultsBeanDao().insertInTx(bean.getResults());            }            //失败了就传空            @Override            public void onFailure(Call<NewsBean> call, Throwable t) {                mianModleIn.Datch(new Exception(""));            }        });    }}
Presenter层

public class MainPrenter {    //WeakReference弱引用    public WeakReference<Xl_View> mainView;    private MainModle mainModle;  //modle层的实体类    public MainPrenter(Xl_View mainView) {        datach(mainView);        this.mainModle = new MainModle();    }    //get请求    public  void get(){        //这里用modle层的实体类点它的方法 来new出来Modle的接口        mainModle.getData(new MianModleIn() {            //成功的方法            @Override            public void Suucer(NewsBean bean) {                //判断如果View层的对象不为空,就把数据给view层的对象                if (mainView!=null){                    //赋值                    mainView.get().Suucer(bean);                }            }            //失败的方法            @Override            public void Datch(Exception e) {                // 因为呦内存泄漏问题 ,所以在失败的方法里也要用非空判断                if (mainView!=null){                    //赋值                    mainView.get().Datch(e);                }            }        });    }    //这是Post请求    public  void post(){        mainModle.getData(new MianModleIn() {            @Override            public void Suucer(NewsBean bean) {                if (mainView!=null){                    mainView.get().Suucer(bean);                }            }            @Override            public void Datch(Exception e) {                if (mainView!=null){                    mainView.get().Datch(e);                }            }        });    }    // 绑定 内存泄漏    public  void  datach(Xl_View view){        mainView = new WeakReference(view);    }    //解绑    public  void  data(){        mainView.clear();    }}
适配器

public class FragmentApdata extends RecyclerView.Adapter<FragmentApdata.ViewHolder> {    Context context; //上下文    NewsBean listBeans;  //集合    public FragmentApdata(Context context, NewsBean listBeans) {        this.context = context;        this.listBeans = listBeans;    }    @Override    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {        View view = View.inflate(context, R.layout.one_layout, null);        return new ViewHolder(view);    }    @Override    public void onBindViewHolder(ViewHolder holder, int position) {        holder.sdv.setImageURI(listBeans.getResults().get(position).getUrl());        holder.tv1.setText(listBeans.getResults().get(position).getWho());    }    @Override    public int getItemCount() {       return  listBeans.getResults().size();    }    public class ViewHolder extends RecyclerView.ViewHolder {        @BindView(R.id.sdv)        SimpleDraweeView sdv;        @BindView(R.id.tv1)        TextView tv1;        @BindView(R.id.tv2)        TextView tv2;        public ViewHolder(View itemView) {            super(itemView);            ButterKnife.bind(this, itemView);        }    }}
适配器布局

<?xml version="1.0" encoding="utf-8"?><LinearLayout    xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:orientation="horizontal"    android:layout_height="match_parent">    <com.facebook.drawee.view.SimpleDraweeView        android:id="@+id/sdv"        android:layout_width="100dp"        android:layout_height="100dp"        android:layout_marginLeft="10dp"        />    <LinearLayout        android:layout_marginTop="10dp"        android:orientation="vertical"        android:layout_width="match_parent"        android:layout_height="wrap_content">        <TextView            android:id="@+id/tv1"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_marginTop="20dp"            android:layout_marginLeft="10dp"            android:text="123"            />        <TextView            android:id="@+id/tv2"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_marginTop="20dp"            android:layout_marginLeft="10dp"            android:text="123"            />    </LinearLayout></LinearLayout>
MyApp开始初始化

public class App extends Application {    public  static IGetDataBase iGetDataBase;  //这是定义的网络请求接口    public static DaoSession daoSession;  //这是自动生成的Dao里的文件 它是打开数据库    @Override    public void onCreate() {        super.onCreate();        //Retrofit网络请求 这里放的是请求头  因为这里是初始化 数据先走这里 http://v.juhe.cn请求头        Retrofit retrofit = new Retrofit.Builder().baseUrl("http://gank.io")                .addConverterFactory(GsonConverterFactory.create())                .build();        iGetDataBase=  retrofit.create(IGetDataBase.class);        DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this,"test");        SQLiteDatabase database  = helper.getWritableDatabase();        daoSession= new DaoMaster(database).newSession();        //Fresco图片加载的框架 初始化        Fresco.initialize(this);    }}
请求数据的接口

public interface IGetDataBase {    //http://gank.io/api/data/%E7%A6%8F%E5%88%A9/10/1    //这是GET请求 上面那是我的请求用的网址 可以观看一下    @GET("api/data/%E7%A6%8F%E5%88%A9/10/1")    Call<NewsBean> get();    @POST("api/data/%E7%A6%8F%E5%88%A9/10/1")    Call<NewsBean> post();}
EvenBus类

public class MessageEvent {    private String message;    public MessageEvent(String message) {        this.message = message;    }    public String getMessage() {        return message;    }    public void setMessage(String message) {        this.message = message;    }}
需要的权限

<uses-permission android:name="android.permission.INTERNET"/>  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
数据库需要配置自动生成,这里就不说了