Rv线性布局与网格切换-Butterknife-Fresco-EventBus-Retrofit

MainActivity.java
public class MainActivity extends AppCompatActivity implements IView{

    @BindView(R.id.main_img)
    ImageView mImageView;

    @BindView(R.id.main_rv)
    RecyclerView mRecyclerView;

    private IPrecenterImpl mIPrecenter;

    private Boolean B=true;
    private Boolean changeGrid=true;
    List<ComputerBean.DataBean> data1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ButterKnife.bind(this);

        mIPrecenter = new IPrecenterImpl(this);
        initData();
    }

    @OnClick(R.id.main_img)
    public void onImgClickListener(){

        if (B){
            B=false;
            if (changeGrid){
                mRecyclerView.addItemDecoration(new DividerItemDecoration(MainActivity.this,DividerItemDecoration.HORIZONTAL));
                changeGrid=false;
            }
            mRecyclerView.setLayoutManager(new GridLayoutManager(MainActivity.this,2));
        }else {
            B=true;
            mRecyclerView.setLayoutManager(new LinearLayoutManager(MainActivity.this,LinearLayoutManager.VERTICAL,false));
        }

        ListShowsAdapter showsAdapter = new ListShowsAdapter(MainActivity.this, data1,B);
        mRecyclerView.setAdapter(showsAdapter);
        showsAdapter.setOnItemClickListener(new ListShowsAdapter.onItemClickListener() {
            @Override
            public void onItemClick(int layoutPosition, String title, String price) {

                EventBusBean busBean = new EventBusBean(layoutPosition, title, price);

                EventBus.getDefault().postSticky(busBean);
                startActivity(new Intent(MainActivity.this,SecondActivity.class));
            }
        });
    }

    private void initData() {

        Map<String, String> map = new HashMap<>();
        map.put("keywords","笔记本");
        map.put("page",1+"");
        map.put("sort",0+"");
        mIPrecenter.startRequestData(Apis.URL_COMPUTER_SHOW_LIST,map, ComputerBean.class,1);
    }

    @Override
    public void showData(Object data) {

        ComputerBean computerBean= (ComputerBean) data;
        data1 = computerBean.getData();

        ListShowsAdapter showsAdapter = new ListShowsAdapter(MainActivity.this, data1,B);

        mRecyclerView.setAdapter(showsAdapter);
        mRecyclerView.addItemDecoration(new DividerItemDecoration(MainActivity.this,DividerItemDecoration.VERTICAL));
        mRecyclerView.setLayoutManager(new LinearLayoutManager(MainActivity.this,LinearLayoutManager.VERTICAL,false));

        showsAdapter.setOnItemClickListener(new ListShowsAdapter.onItemClickListener() {
            @Override
            public void onItemClick(int layoutPosition, String title, String price) {

                EventBusBean busBean = new EventBusBean(layoutPosition, title, price);

                EventBus.getDefault().postSticky(busBean);

                startActivity(new Intent(MainActivity.this,SecondActivity.class));
            }
        });
    }
}

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".activity.MainActivity"
    android:orientation="vertical">

   <LinearLayout
       android:layout_width="match_parent"
       android:layout_height="50dp"
       android:orientation="horizontal"
       android:gravity="center_vertical">

       <ImageView
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:src="@mipmap/ic_launcher_round"/>

       <EditText
           android:layout_width="match_parent"
           android:layout_weight="1"
           android:layout_height="wrap_content" />

       <ImageView
           android:id="@+id/main_img"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:src="@mipmap/ic_launcher_round"/>
   </LinearLayout>
    <android.support.v7.widget.RecyclerView
        android:id="@+id/main_rv"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</LinearLayout>
ListShowsAdapter.java
public class ListShowsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{

    private Context mContext;
    List<ComputerBean.DataBean> list;
    private Boolean mBoolean;

    public ListShowsAdapter(Context context, List<ComputerBean.DataBean> list, Boolean aBoolean) {
        mContext = context;
        this.list = list;
        mBoolean = aBoolean;
    }

    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        if (mBoolean){

            View view = View.inflate(parent.getContext(), R.layout.item_linelayout, null);
            LineViewHolder holder = new LineViewHolder(view);
            return holder;

        }else {
            View view = View.inflate(parent.getContext(), R.layout.item_gridlayout, null);
            GridViewHolder holder = new GridViewHolder(view);
            return holder;
        }
    }

    public interface onItemClickListener{
        void onItemClick(int layoutPosition, String title, String price);
    }

    private onItemClickListener mOnItemClickListener;

    public void setOnItemClickListener(onItemClickListener onItemClickListener) {
        mOnItemClickListener = onItemClickListener;
    }

    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, final int position) {

        if (mBoolean){

            final LineViewHolder lineViewHolder = (LineViewHolder) holder;

            lineViewHolder.mTextView_title.setText(list.get(position).getTitle());
            lineViewHolder.mTextView_price.setText(list.get(position).getPrice()+"");

            String images = list.get(position).getImages();
            Pattern pattern = Pattern.compile("\\|");
            String[] img = pattern.split(images);

            Uri uri = Uri.parse(img[0]);
            lineViewHolder.mSimpleDraweeView.setImageURI(uri);
            lineViewHolder.itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    if (mOnItemClickListener!=null){
                        int layoutPosition = lineViewHolder.getLayoutPosition();
                        String title = list.get(position).getTitle();
                        String price = list.get(position).getPrice()+"";

                        mOnItemClickListener.onItemClick(layoutPosition,title,price);
                    }
                }
            });

        }else {

            final GridViewHolder gridViewHolder = (GridViewHolder) holder;

            gridViewHolder.mTextView_title.setText(list.get(position).getTitle());
            gridViewHolder.mTextView_price.setText(list.get(position).getPrice()+"");

            String images = list.get(position).getImages();
            Pattern pattern = Pattern.compile("\\|");
            String[] img = pattern.split(images);

            Uri uri = Uri.parse(img[0]);
            gridViewHolder.mSimpleDraweeView.setImageURI(uri);

            gridViewHolder.itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    if (mOnItemClickListener!=null){
                        int layoutPosition = gridViewHolder.getLayoutPosition();
                        String title = list.get(position).getTitle();
                        String price = list.get(position).getPrice()+"";

                        mOnItemClickListener.onItemClick(layoutPosition,title,price);
                    }
                }
            });
        }
    }

    @Override
    public int getItemCount() {
        return list.size();
    }

    public class LineViewHolder extends RecyclerView.ViewHolder{

        @BindView(R.id.item_line_img)
        SimpleDraweeView mSimpleDraweeView;

        @BindView(R.id.item_line_text_title)
        TextView mTextView_title;

        @BindView(R.id.item_line_text_price)
        TextView mTextView_price;
        public LineViewHolder(View itemView) {
            super(itemView);

            ButterKnife.bind(this,itemView);
        }
    }

    public class GridViewHolder extends RecyclerView.ViewHolder{

        @BindView(R.id.item_grid_img)
        SimpleDraweeView mSimpleDraweeView;

        @BindView(R.id.item_grid_text_title)
        TextView mTextView_title;

        @BindView(R.id.item_grid_text_price)
        TextView mTextView_price;
        public GridViewHolder(View itemView) {
            super(itemView);

            ButterKnife.bind(this,itemView);
        }
    }
}
item_linelayout.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingTop="10dp"
    android:orientation="horizontal"
    android:gravity="center_vertical"
    android:background="#fff">

    <com.facebook.drawee.view.SimpleDraweeView
        android:id="@+id/item_line_img"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_marginLeft="20dp"/>

    <LinearLayout
        android:layout_marginLeft="20dp"
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:orientation="vertical">
        <TextView
            android:id="@+id/item_line_text_title"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            />

        <TextView
            android:id="@+id/item_line_text_price"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="20dp"
            android:textColor="@color/colorAccent"
            />
    </LinearLayout>
</LinearLayout>

line_gridlayout.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingTop="10dp"
    android:orientation="vertical"
    android:gravity="center_vertical"
    android:background="#fff">

    <com.facebook.drawee.view.SimpleDraweeView
        android:id="@+id/item_grid_img"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_gravity="center_horizontal"/>

    <LinearLayout
        android:layout_marginLeft="20dp"
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:orientation="vertical">
        <TextView
            android:id="@+id/item_grid_text_title"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            />

        <TextView
            android:id="@+id/item_grid_text_price"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="20dp"
            android:textColor="@color/colorAccent"
            />
    </LinearLayout>
</LinearLayout>
IModelImpl.java
public class IModelImpl implements IModel{

    @Override
    public void requestData(String url, Map<String, String> map, final Class clazz, int z, final MyCallBack myCallBack) {

        RetrofitManager.getInstance().post(url,map).result(new RetrofitManager.HttpListener() {
            @Override
            public void onFail() {

            }

            @Override
            public void onResponse(String json) {

                Object o = new Gson().fromJson(json, clazz);
                myCallBack.setData(o);
            }
        });
    }
}
SecondActivity.java
public class SecondActivity extends AppCompatActivity{
    private String mTitle;
    private String mPrice;

    @BindView(R.id.second_title)
    TextView mTextView_title;

    @BindView(R.id.second_price)
    TextView mTextView_price;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);

        ButterKnife.bind(this);
        EventBus.getDefault().register(this);

        mTextView_title.setText(mTitle);
        mTextView_price.setText(mPrice);
    }

    @Subscribe(threadMode = ThreadMode.MAIN,sticky = true)
    public void sjx(EventBusBean bus){
         mTitle = bus.getTitle();
         mPrice = bus.getPrice();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        EventBus.getDefault().unregister(this);
    }
}
BaseApis.java
public interface BaseApis {

    @GET
    Observable<ResponseBody> get(@Url String url);

    @POST
    Observable<ResponseBody> post(@Url String url, @QueryMap Map<String,String> map);

}
RetrofitManager.java
public class RetrofitManager {

    private static RetrofitManager mRetrofitManager;
    private final String BASE_URL="http://www.zhaoapi.cn";
    private final OkHttpClient mOkHttpClient;
    private final BaseApis mBaseApis;

    public RetrofitManager() {

         mOkHttpClient = new OkHttpClient.Builder()
                 .readTimeout(5000, TimeUnit.MILLISECONDS)
                 .writeTimeout(5000,TimeUnit.MILLISECONDS)
                 .connectTimeout(5000,TimeUnit.MILLISECONDS)
                 .retryOnConnectionFailure(true)
                 .build();

        Retrofit retrofit = new Retrofit.Builder()
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .baseUrl(BASE_URL)
                .client(mOkHttpClient)
                .build();

         mBaseApis = retrofit.create(BaseApis.class);
    }

    public static synchronized RetrofitManager getInstance(){

        if (mRetrofitManager==null){
            mRetrofitManager=new RetrofitManager();
        }
        return mRetrofitManager;
    }

    private Observer mObserver=new Observer<ResponseBody>(){
        @Override
        public void onCompleted() {

        }

        @Override
        public void onError(Throwable e) {

        }

        @Override
        public void onNext(ResponseBody responseBody) {

            try {
                String json = responseBody.string();

                if (mHttpListener!=null){
                    mHttpListener.onResponse(json);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    };

    public interface HttpListener{
        void onFail();
        void onResponse(String json);
    }

    private HttpListener mHttpListener;

    public void result(HttpListener httpListener){
        mHttpListener=httpListener;
    }


    public RetrofitManager get(String url){
        mBaseApis.get(url)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(mObserver);
        return mRetrofitManager;
    }

    public RetrofitManager post(String url, Map<String,String> map){
        if (map==null){
            map = new HashMap<>();
        }

        mBaseApis.post(url,map)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(mObserver);
        return mRetrofitManager;
    }

}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值