mvp_greendao_recyclerview_fresco_retrofit2_butterknife_eventbus_ViewPage

主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>
数据库需要配置自动生成,这里就不说了


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值