MVP和Fresco和RXJava和绑定取绑加上拉下拉

来源:互联网 发布:免费版 ssl 阿里云 编辑:程序博客网 时间:2024/05/22 12:38

Model层

M层接口

public interface IModel {    public void xrecy(Observer<Bean> observer);}


m层类

public class Model implements IModel{private Bean bean;    @Override    public void xrecy(Observer<Bean> observer) {        Observable.create(new Observable.OnSubscribe<Bean>() {            @Override            public void call(final Subscriber<? super Bean> subscriber) {                Retrofit retrofit=new Retrofit.Builder()                        .baseUrl("http://m.yunifang.com/")                        .addConverterFactory(GsonConverterFactory.create())                        .addCallAdapterFactory(RxJavaCallAdapterFactory.create())                        .build();                GetRequest_Interface getUrl_jk=retrofit.create(GetRequest_Interface.class);                Call<Bean> call=getUrl_jk.getCall();                call.enqueue(new Callback<Bean>() {                    @Override                    public void onResponse(Call<Bean> call, Response<Bean> response) {                        bean=response.body();                        subscriber.onNext(bean);                        subscriber.onCompleted();                    }                    @Override                    public void onFailure(Call<Bean> call, Throwable t) {                    }                });            }        }).subscribeOn(Schedulers.newThread()).observeOn(AndroidSchedulers.mainThread())                .subscribe(observer);    }}
 view层

public interface IHomeView {    public void showData(Bean bean);}
p层

接口

public interface IBindDing<T> {    public void attach(T view);    public void detach();}
IPresenter

public class IPresenter implements IBindDing<IHomeView>{    Context context;    Model model;    IHomeView view;    SoftReference<IHomeView> softReference;    public IPresenter(Context context, IHomeView view) {        this.context = context;        attach(view);        model=new Model();    }    public void showRecy(){        model.xrecy(new Observer<Bean>() {            @Override            public void onCompleted() {            }            @Override            public void onError(Throwable e) {            }            @Override            public void onNext(Bean bean) {                   softReference.get().showData(bean);            }        });    }    @Override    public void attach(IHomeView view) {        softReference=new SoftReference<IHomeView>(view);        Log.i("attach","绑定成功");    }    @Override    public void detach() {       softReference.clear();        Log.i("detach","取消绑定");    }}

//注解的接口

public interface GetRequest_Interface {    @GET("yunifang/mobile/home")    Call<Bean> getCall();}
//实现的主类

public class Tabf1<T extends IPresenter> extends Fragment implements IHomeView{    private T presenter;    private View view;    private XRecyclerView xrv;    private MyAdapter adapter;    private Handler handler=new Handler(){};    private int index=7;    private boolean type=true;    @Nullable    @Override    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {        view = View.inflate(getActivity(), R.layout.tabf1,null);        presenter= (T) new IPresenter(getActivity(),this);        Fresco.initialize(getActivity());          xrv=view.findViewById(R.id.xrv);        xrv.setLayoutManager(new LinearLayoutManager(getActivity()));        presenter.showRecy();        return view;    }    @Override    public void showData(final Bean bean) {        adapter=new MyAdapter(getActivity(),bean);        xrv.setAdapter(adapter);        xrv.setLoadingListener(new XRecyclerView.LoadingListener() {            @Override            public void onRefresh() {                handler.postDelayed(new Runnable() {                    @Override                    public void run() {                        type=false;                        index++;                        xrv.refreshComplete();                        Toast.makeText(getActivity(),"刷新成功",Toast.LENGTH_SHORT).show();                    }                },1000);            }            @Override            public void onLoadMore() {                handler.postDelayed(new Runnable() {                    @Override                    public void run() {                        type=true;                        index++;                        bean.getData().getSubjects().addAll(bean.getData().getSubjects());                        xrv.refreshComplete();                        Toast.makeText(getActivity(),"上拉加载",Toast.LENGTH_SHORT).show();                    }                },1000);            }        });    }    @Override    public void onDestroy() {        super.onDestroy();        presenter.detach();    }}
//viewPager与按钮点击

public class MainActivity extends AppCompatActivity {    private ViewPager vp;    private MyPagerAdapter adapter;    private RadioGroup rg;    private RadioButton rb1,rb2,rb3,rb4;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initView();        adapter=new MyPagerAdapter(getSupportFragmentManager());        vp.setAdapter(adapter);        //默认选中资讯页面        vp.setCurrentItem(2);        rb3.setTextColor(Color.GREEN);      rb1.setOnClickListener(new View.OnClickListener() {          @Override          public void onClick(View view) {              vp.setCurrentItem(0);          }      });        rb2.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                vp.setCurrentItem(1);            }        });        rb3.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                vp.setCurrentItem(2);            }        });        rb4.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                vp.setCurrentItem(3);            }        });        vp.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {            @Override            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {            }            @Override            public void onPageSelected(int position) {                 switch (position)                 {                     case 0:                         rb1.setTextColor(Color.GREEN);                         rb2.setTextColor(Color.BLACK);                         rb3.setTextColor(Color.BLACK);                         rb4.setTextColor(Color.BLACK);                         vp.setCurrentItem(0);                         break;                     case 1:                         rb2.setTextColor(Color.GREEN);                         rb1.setTextColor(Color.BLACK);                         rb3.setTextColor(Color.BLACK);                         rb4.setTextColor(Color.BLACK);                         vp.setCurrentItem(1);                         break;                     case 2:                         rb3.setTextColor(Color.GREEN);                         rb2.setTextColor(Color.BLACK);                         rb1.setTextColor(Color.BLACK);                         rb4.setTextColor(Color.BLACK);                         vp.setCurrentItem(2);                         break;                     case 3:                         rb4.setTextColor(Color.GREEN);                         rb2.setTextColor(Color.BLACK);                         rb3.setTextColor(Color.BLACK);                         rb1.setTextColor(Color.BLACK);                         vp.setCurrentItem(3);                         break;                 }            }            @Override            public void onPageScrollStateChanged(int state) {            }        });    }    private void initView() {        vp= (ViewPager) findViewById(R.id.vp);        rg= (RadioGroup) findViewById(R.id.rg);        rb1= (RadioButton) findViewById(R.id.rb1);        rb2= (RadioButton) findViewById(R.id.rb2);        rb3= (RadioButton) findViewById(R.id.rb3);        rb4= (RadioButton) findViewById(R.id.rb4);    }    class MyPagerAdapter extends FragmentPagerAdapter{        public MyPagerAdapter(FragmentManager fm) {            super(fm);        }        @Override        public Fragment getItem(int position) {            Fragment fragment=null;            switch (position)            {                case 0:                    fragment=new Fragment1();                    break;                case 1:                    fragment=new Fragment2();                    break;                case 2:                    fragment=new Fragment3();                    break;                case 3:                    fragment=new Fragment4();                    break;            }            return fragment;        }        @Override        public int getCount() {            return 4;        }    }}
//布局

<android.support.v4.view.ViewPager        android:layout_below="@+id/tv_title"        android:id="@+id/vp"        android:layout_width="match_parent"        android:layout_height="match_parent">    </android.support.v4.view.ViewPager><LinearLayout    android:layout_alignParentBottom="true"    android:layout_width="match_parent"    android:layout_height="50dp"    >    <RadioGroup        android:id="@+id/rg"        android:orientation="horizontal"        android:layout_gravity="center"        android:layout_width="match_parent"        android:layout_height="wrap_content">        <RadioButton            android:id="@+id/rb1"            android:text="首页"            android:textSize="25sp"            android:button="@null"            android:layout_weight="1"            android:layout_width="wrap_content"            android:layout_height="wrap_content" />        <RadioButton            android:id="@+id/rb2"            android:text="排行"            android:textSize="25sp"            android:button="@null"            android:layout_weight="1"            android:layout_width="wrap_content"            android:layout_height="wrap_content" />        <RadioButton        android:id="@+id/rb3"        android:text="资讯"        android:textSize="25sp"        android:button="@null"        android:layout_weight="1"        android:layout_width="wrap_content"        android:layout_height="wrap_content" />        <RadioButton        android:id="@+id/rb4"        android:text="交易"        android:textSize="25sp"        android:button="@null"        android:layout_weight="1"        android:layout_width="wrap_content"        android:layout_height="wrap_content" />    </RadioGroup></LinearLayout>
app依赖

dependencies {    compile 'com.android.support:appcompat-v7:26.+'    compile 'com.android.support.constraint:constraint-layout:1.0.2'    testCompile 'junit:junit:4.12'    compile 'com.android.support:design:26.0.0-alpha1'    compile 'com.jcodecraeer:xrecyclerview:1.3.2'    compile 'com.android.support:recyclerview-v7:26.0.0-alpha1'    compile 'com.google.code.gson:gson:2.2.4'    compile 'com.squareup.okhttp3:okhttp:3.9.0'    compile 'com.facebook.fresco:fresco:0.11.0'    compile 'io.reactivex:rxjava:1.0.14'    compile 'com.squareup.retrofit2:retrofit:2.0.2'    compile 'io.reactivex:rxandroid:1.0.1'    compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta4'    compile 'com.squareup.retrofit2:adapter-rxjava:2.0.0-beta4'    compile 'com.squareup.retrofit2:converter-gson:2.1.0'}