Retrofit+RXjava+多条目+itew的点击事件+软引用+泛型+绑定+解绑

=====================================创建的接口GET拼接====================

public interface Iwz_jk {
    @GET("home")
    Call<Bean> getCall();
}
======================================MM层======================== 
//创建接口
public interface Imm  {
    //观察者
    public void shuju(Observer<Bean> observer);

}
//实现接口
public class Model implements Imm{
    private Bean bean;
    @Override
    public void shuju(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/yunifang/mobile/")
                        .addConverterFactory(GsonConverterFactory.create())
                        .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                        .build();
                //实例化网址的接口
                Iwz_jk    wljk=retrofit.create(Iwz_jk.class);

                Call<Bean>   call=wljk.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);

    }
}
============================VV===========================
//创建接口
public interface Ivv {
    public void ShowView(Bean bean);
}

=============================PP==============================
//接口
public interface Ipp<T> {
    //方法:1.绑定方法  2.解绑的方法
    public void attch(T view);
    public void detch();
}

//实现接口
public class Presenter implements Ipp<Ivv>{
    Context  context;
    Model  mm;
    Ivv  vv;
    SoftReference<Ivv>    softReference;//软引用

    public Presenter(Context context, Ivv vv) {
        this.context = context;
        attch(vv);     //绑定的方法
        mm=new Model();
    }

    public  void getshuju(){
        //调用观察者的方法
        mm.shuju(new Observer<Bean>() {
            @Override
            public void onCompleted() {

            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onNext(Bean bean) {
                //调用方法
                //vv.ShowView(bean);
                //软引用的调用
                softReference.get().ShowView(bean);
            }
        });
    }



//重写的方法 绑定
    @Override
    public void attch(Ivv view) {
        softReference=new SoftReference<Ivv>(view);
    }

    //解绑的方法
    @Override
    public void detch() {

        softReference.clear();
    }
}
==================================BaseAtivity=======================
//创建的Activity继承泛型<T extends Ipp>
public abstract class BaseActivity<T extends Ipp> extends AppCompatActivity {

    //定义属性
    T  presenter;
    @Override
    public void onCreate(@Nullable Bundle savedInstanceState, @Nullable PersistableBundle persistentState) {
        super.onCreate(savedInstanceState, persistentState);
        //定义抽象方法
        createpresenter();
    }

    protected abstract void createpresenter();


    //销毁的方法
    @Override
    protected void onDestroy() {
        super.onDestroy();

        presenter.detch();
    }
}
=====================================适配器========================
public class Myadapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

    Context  context;
    Bean     bean;
    OnItemClickLinstener   listener;

    public Myadapter(Context context, Bean bean) {
        this.context = context;
        this.bean = bean;

    }

    //单例模式定义的多布局
    public  static final int TYPE_ONE=0;
    public  static final int TYPE_TWO=1;
    MyViewHolder   holder1;
    MyViewHolder2   holder2;


    //接口的方法实例化

    //获取方法的传参值
    public void setOnItemClickLinstener(OnItemClickLinstener listener) {
        //指定当前的值
        this.listener = listener;
    }



    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        if(viewType==TYPE_ONE)
        {
            View view=View.inflate(context,R.layout.item,null);
            holder1=new MyViewHolder(view);
            //页面的点击事件
            view.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    //实例化listener来调用接口的方法    强转类型
                    listener.OnItemClick(view, (int) view.getTag());
                }
            });
            return  holder1;
        }else {
            final View view2=View.inflate(context,R.layout.item2,null);
            holder2=new MyViewHolder2(view2);
           ///页面的点击事件
            view2.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    listener.OnItemClick(view2, (int) view2.getTag());
                }
            });
            return  holder2;
        }

    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
               if(holder1 instanceof MyViewHolder)
               {

                   holder1.tv.setText(bean.getData().getDefaultGoodsList().get(position).getGoods_name());
                   ImageLoaderConfiguration   cf=ImageLoaderConfiguration.createDefault(context);
                   ImageLoader.getInstance().init(cf);
                   ImageLoader.getInstance().displayImage(bean.getData().getDefaultGoodsList().get(position).getGoods_img(),holder1.img);
                   holder1.itemView.setTag(position);
               }
               if(holder2 instanceof MyViewHolder2)
               {

                   holder2.tv2.setText(bean.getData().getDefaultGoodsList().get(position).getGoods_name());
                   DraweeController   controller= Fresco.newDraweeControllerBuilder()
                           .setUri(bean.getData().getDefaultGoodsList().get(position).getGoods_img())
                           .setAutoPlayAnimations(true)
                           .build();
                   holder2.img2.setController(controller);
                   holder2.itemView.setTag(position);
               }
    }

    @Override
    public int getItemCount() {
        return  bean.getData().getDefaultGoodsList()==null ? 0 :bean.getData().getDefaultGoodsList().size();
    }

    @Override
    public int getItemViewType(int position) {
        if (position%2==0)
        {
            return  TYPE_ONE;
        }else {
            return  TYPE_TWO;
        }
    }

    public class MyViewHolder extends RecyclerView.ViewHolder{

        ImageView   img;
        TextView  tv;
       public MyViewHolder(View itemView) {
           super(itemView);
           img= (ImageView) itemView.findViewById(R.id.img);
           tv= (TextView) itemView.findViewById(R.id.tv);
       }
   }



    class  MyViewHolder2 extends RecyclerView.ViewHolder{
        SimpleDraweeView img2;
       TextView  tv2;
        public MyViewHolder2(View itemView) {
            super(itemView);
            img2= (SimpleDraweeView) itemView.findViewById(R.id.img2);
            tv2= (TextView) itemView.findViewById(R.id.tv2);
        }
    }

    //创建接口
    public  interface OnItemClickLinstener{
        //创建接口的方法
        public void OnItemClick(View view,int position);
    }





}

===================================MainActivity===================

//继承BaseActivity<Presenter>的类
public class MainActivity extends BaseActivity<Presenter> implements Ivv {

    RecyclerView  rv;

    Myadapter  adapter;

    SwipeRefreshLayout srl;

    Bean   bean;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Fresco.initialize(this);
        setContentView(R.layout.activity_main);
        rv= (RecyclerView) findViewById(R.id.rv);
        srl= (SwipeRefreshLayout) findViewById(R.id.srl);



        //直接P层的类实例化   调用数据
        presenter=new Presenter(this,this);
        presenter.getshuju();

        //下拉刷新
        srl.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                presenter.getshuju();
                adapter.notifyDataSetChanged();
                srl.setRefreshing(false);

            }
        });




    }


    @Override
    public void ShowView(Bean bean) {
        LinearLayoutManager   manager=new LinearLayoutManager(this);
        rv.setLayoutManager(manager);
        rv.addItemDecoration(new DividerItemDecoration(this,DividerItemDecoration.VERTICAL));
        adapter=new Myadapter(this,bean);

        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                rv.setAdapter(adapter);
            }
        });

        adapter.setOnItemClickLinstener(new Myadapter.OnItemClickLinstener() {
            @Override
            public void OnItemClick(View view, int position) {
                Toast.makeText(MainActivity.this,"你点击的是条目",Toast.LENGTH_SHORT).show();
            }
        });



    }

    @Override
    protected void createpresenter() {

    }
}
============================item1===============
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    xmlns:fresco="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_height="match_parent">

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

-->
    <TextView
        android:id="@+id/tv"
        android:text="26565465465446"
        android:textSize="25dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/img"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

</RelativeLayout>

=======================================item2=====================
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    xmlns:fresco="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_height="match_parent">


    <com.facebook.drawee.view.SimpleDraweeView
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:id="@+id/img2"
        fresco:placeholderImage="@mipmap/ic_launcher"

        fresco:roundAsCircle="true"/>

-->
    <TextView
        android:id="@+id/tv2"
        android:text="26565465465446"
        android:textSize="15dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/img2"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true" />


</RelativeLayout>








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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值