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