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>数据库需要配置自动生成,这里就不说了
阅读全文
0 0
- mvp_greendao_recyclerview_fresco_retrofit2_butterknife_eventbus_ViewPage
- 神经网络 opencv实现
- u盘安装centos7.2
- 使用LVS实现负载均衡原理及安装配置详解
- 基于C#的异步Socket程序(TCP)
- Linux 制作回收站
- mvp_greendao_recyclerview_fresco_retrofit2_butterknife_eventbus_ViewPage
- 自定义控件实现轮播图
- 第14周项目2- 用哈希法组织关键字
- servlet处理类似表单提交或购买删除购物车中物品用转发还是重定向技术解决方案
- 计算范式之并行计算
- Android三种实现定时器的方法
- POJ
- Nginx学习之反向代理
- POJ:2109-Power of Cryptography(关于double的误差)