MVP+Rxjava请求数据

compile 'com.android.support:design:25.3.1'
compile 'com.android.support:recyclerview-v7:25.3.1'
compile 'com.squareup.retrofit2:retrofit:2.0.2'
compile 'com.squareup.retrofit2:converter-gson:2.0.2'
compile 'com.squareup.retrofit2:adapter-rxjava:2.0.2'
compile 'io.reactivex:rxandroid:1.1.0'
compile 'com.squareup.okhttp3:logging-interceptor:3.4.1'
compile 'com.github.bumptech.glide:glide:3.7.0'
需要导入的依赖


//布局如下Main
<?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">

    <FrameLayout
        android:id="@+id/content"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"></FrameLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:background="#FFFFFF"
        android:orientation="horizontal">
            <LinearLayout
                android:id="@+id/first_layout"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:layout_centerVertical="true"
                android:orientation="vertical">
                <ImageView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_horizontal"
                    android:src="@android:drawable/ic_menu_compass" />
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_horizontal"
                    android:layout_marginTop="5dp"
                    android:text="消息"
                    android:textColor="#7597B3" />
            </LinearLayout>
            <LinearLayout
                android:id="@+id/second_layout"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:layout_centerVertical="true"
                android:orientation="vertical">
                <ImageView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_horizontal"
                    android:src="@android:drawable/ic_menu_agenda" />
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_horizontal"
                    android:layout_marginTop="5dp"
                    android:text="发现"
                    android:textColor="#7597B3" />
            </LinearLayout>
            <LinearLayout
                android:id="@+id/third_layout"
                android:layout_width="0dp"
                android:layout_weight="1"
                android:layout_height="wrap_content"
                android:layout_centerVertical="true"
                android:orientation="vertical">
                <ImageView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_horizontal"
                    android:src="@android:drawable/ic_menu_edit" />
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_horizontal"
                    android:layout_marginTop="5dp"
                    android:text="记录"
                    android:textColor="#7597B3" />
            </LinearLayout>
            <LinearLayout
                android:id="@+id/fourth_layout"
                android:layout_width="0dp"
                android:layout_weight="1"
                android:layout_height="wrap_content"
                android:layout_centerVertical="true"
                android:orientation="vertical">
                <ImageView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_horizontal"
                    android:src="@android:drawable/ic_menu_myplaces" />
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_horizontal"
                    android:layout_marginTop="5dp"
                    android:text="我的"
                    android:textColor="#7597B3" />
            </LinearLayout>
    </LinearLayout>
</LinearLayout>
//第一个fragment布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.design.widget.TabLayout
        android:id="@+id/mytab"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></android.support.v4.view.ViewPager>

</LinearLayout>
//home中加入cyclerview
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></android.support.v7.widget.RecyclerView>

</LinearLayout>
//item
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal" android:layout_width="match_parent"
    android:layout_height="match_parent">


<ImageView
    android:id="@+id/img"
    android:layout_width="100dp"
    android:layout_height="100dp"
    android:src="@mipmap/ic_launcher"/>
    <TextView
        android:id="@+id/tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>
//
//VIew中实现的代码

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private LinearLayout firstLayout;
    private LinearLayout secondLayout;
    private LinearLayout thirdLayout;
    private LinearLayout fourthLayout;
    private android.support.v4.app.FragmentTransaction transaction;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        firstLayout = (LinearLayout) findViewById(R.id.first_layout);
        secondLayout = (LinearLayout) findViewById(R.id.second_layout);
        thirdLayout = (LinearLayout) findViewById(R.id.third_layout);
        fourthLayout = (LinearLayout) findViewById(R.id.fourth_layout);
        firstLayout.setOnClickListener(this);
        secondLayout.setOnClickListener(this);
        thirdLayout.setOnClickListener(this);
        fourthLayout.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.first_layout:
                FragmentManager manager1 = getSupportFragmentManager();
                transaction = manager1.beginTransaction();
                transaction.replace(R.id.content,new OneFragment());
                transaction.commit();
                break;
            case R.id.second_layout:
                FragmentManager manager2 = getSupportFragmentManager();
                transaction = manager2.beginTransaction();
                transaction.replace(R.id.content,new TwoFragment());
                transaction.commit();
                break;
            case R.id.third_layout:
                FragmentManager manager3 = getSupportFragmentManager();
                transaction = manager3.beginTransaction();
                transaction.replace(R.id.content,new ThreeFragment());
                transaction.commit();
                break;
            case R.id.fourth_layout:
                FragmentManager manager4 = getSupportFragmentManager();
                transaction = manager4.beginTransaction();
                transaction.replace(R.id.content,new FourFragment());
                transaction.commit();
                break;
        }
    }
}
 
 
//第一个页面Fragment
public class OneFragment extends android.support.v4.app.Fragment {
    TabLayout mytab;
    ViewPager viewPager;
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = View.inflate(getActivity(), R.layout.fragment_one,null);
        mytab = (TabLayout)view. findViewById(R.id.mytab);
        viewPager = (ViewPager) view.findViewById(R.id.viewpager);
        initData();
        return view;
    }

    private void initData() {
        List<Fragment> list = new ArrayList<>();
        for (int i = 0; i <7 ;i++){
            list.add(new HomeFragment());
        }
        MyFragmentAdapter adapter = new MyFragmentAdapter(getFragmentManager());
        adapter.setList(list);
        viewPager.setAdapter(adapter);
        for (int i = 0 ;i<7;i++){
            mytab.addTab(mytab.newTab());
        }
        mytab.setupWithViewPager(viewPager);
        mytab.getTabAt(0).setText("沪深");
        mytab.getTabAt(1).setText("板块");
        mytab.getTabAt(2).setText("指数");
        mytab.getTabAt(3).setText("港股");
        mytab.getTabAt(4).setText("新三板");
        mytab.getTabAt(5).setText("商品");
        mytab.getTabAt(6).setText("其他");
        mytab.setTabMode(TabLayout.MODE_SCROLLABLE);
    }
}



//定义一个Iview接口
public interface IView {
    void getData(List<MyBean.DataBean> list);
}
//HOmeFragment显示图片和数据
public class HomeFragment extends Fragment implements IView{

    private RecyclerView recyclerView;
    private IPresenter iPresenter;
    private List<MyBean.DataBean> data;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = View.inflate(getActivity(), R.layout.fragment_home,null);
        recyclerView = (RecyclerView) view.findViewById(R.id.recyclerview);
        recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
        IPresenter iPresenter = new IPresenter(this);
        iPresenter.getUri(Api.URL);
        //initData();
        return view;
    }


    @Override
    public void getData(List<MyBean.DataBean> list) {
        recyclerView.setAdapter(new MyAdapter(list,getActivity()));
    }
}
//其他Fragment随便写
public class ThreeFragment extends Fragment {
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = View.inflate(getActivity(), R.layout.fragment_three,null);
        return view;
    }
}
//Presenter写一个Api
public class Api {
    public static final String URL = "http://api.expoon.com/AppNews/getNewsList/";
}
//定义一个Presenter类进行交互
public class IPresenter implements Model.OnFinish{

    IView iView;
    Model model;

    public IPresenter(IView iView) {
        this.iView = iView;
        this.model = new Model();
        model.setOnFinish(this);
    }

    public void getUri(String url){
        model.getUrl(url);
    }

    @Override
    public void OnFinishListener(List<MyBean.DataBean> list) {
        iView.getData(list);
    }
}
 
//Modle请求
public interface ApiService {

    @GET("type/1/p/1")
    Observable<MyBean> getbean();
}
//另一个接口
public interface IModel{
    void getUrl(String url);
}
//定义Model类
public class Model implements IModel{

    List<MyBean.DataBean> list;
    OnFinish onFinish;

    public interface OnFinish{
        void OnFinishListener(List<MyBean.DataBean> list);
    }

    public void setOnFinish(OnFinish onFinish){
        this.onFinish = onFinish;
    }

    @Override
    public void getUrl(String url) {
        list = new ArrayList<>();
        Retrofit retrofit = new Retrofit.Builder().baseUrl(Api.URL).addConverterFactory(GsonConverterFactory.create()).addCallAdapterFactory(RxJavaCallAdapterFactory.create()).build();
        ApiService apiService = retrofit.create(ApiService.class);
        Observable<MyBean> bean = apiService.getbean();
        bean.subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<MyBean>() {
                    @Override
                    public void onCompleted() {

                    }

                    @Override
                    public void onError(Throwable e) {

                    }

                    @Override
                    public void onNext(MyBean myBean) {
                        List<MyBean.DataBean> data = myBean.getData();
                        onFinish.OnFinishListener(data);
                    }
                });
    }
}
//Bean类接口数据,这里就不写了
//适配器,用的是Glide请求图片RecyclerView展示
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder>{
    List<MyBean.DataBean> list = new ArrayList<>();
    Context context;

    public MyAdapter(List<MyBean.DataBean> list, Context context) {
        this.list = list;
        this.context = context;
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        MyViewHolder holder= null;
        View view = View.inflate(context, R.layout.fragment_home_item,null);
        holder = new MyViewHolder(view);
        return holder;
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {
        holder.tv.setText(list.get(position).getNews_summary());
        Glide.with(context)
                .load(list.get(position).getPic_url())
                .into(holder.img);
    }

    @Override
    public int getItemCount() {
        return list.size();
    }
    public class MyViewHolder extends RecyclerView.ViewHolder{

        ImageView img;
        TextView tv;
        public MyViewHolder(View itemView) {
            super(itemView);
            tv = (TextView) itemView.findViewById(R.id.tv);
            img = (ImageView) itemView.findViewById(R.id.img);
        }
    }
}
//Fragment适配器
 
public class MyFragmentAdapter extends FragmentPagerAdapter{
    public MyFragmentAdapter(FragmentManager fm) {
        super(fm);
    }
    List<Fragment> list = new ArrayList<>();

    public void setList(List<Fragment> lists) {
        list = lists;
    }

    @Override
    public Fragment getItem(int position) {
        return list.get(position);
    }

    @Override
    public int getCount() {
        return list.size();
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值