RecyclerView和OKhttp

RecyclerView 删除条目 添加 更新 多条目的使用

首先导入依赖
加权限

<uses-permission android:name="android.permission.INTERNET"/>
  implementation 'com.android.support:recyclerview-v7:27.1.1'
    implementation 'com.squareup.okhttp3:okhttp:3.11.0'
    implementation 'com.google.code.gson:gson:2.2.4'
    implementation 'com.squareup.picasso:picasso:2.3.2'
    implementation 'com.google.guava:guava:16.0.1'

然后写布局 layout_main

<?xml version="1.0" encoding="utf-8"?>
<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"
    android:orientation="vertical"
    tools:context=".MainActivity">

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

OKhttp工具类

public class Tools {
    public Tools() {
    }
    public Tools get(String path){
        OkHttpClient okHttpClient = new OkHttpClient();
        OkHttpClient.Builder builder = new OkHttpClient.Builder();
        builder.writeTimeout(3000, TimeUnit.MILLISECONDS);
        builder.readTimeout(3000,TimeUnit.MILLISECONDS);
        StringBuffer buffer = new StringBuffer();
        String s = buffer.toString();
        RequestBody requestBody = RequestBody.create(MediaType.parse("application/json charset=utf-8"), s);
         Request request = new Request.Builder()
                .post(requestBody)
                .url(path)
                .build();
        Call call = okHttpClient.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {

            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                int code = response.code();
                if (code==200){
                    ResponseBody body = response.body();
                    String string = body.string();
                        data.getDate(string);
                }
            }
        });
        return this;
    }
    private HttpDate data;
    public void setData(HttpDate data){
        this.data=data;
    }
    public interface HttpDate{
        void getDate(String s);
    }
}

Bean类

public class User {
    private String msg;
    private int code;
    private List<DataBean> data;

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public List<DataBean> getData() {
        return data;
    }

    public void setData(List<DataBean> data) {
        this.data = data;
    }

    public static class DataBean {
        /**
         * uniquekey : 1326bf3c4505783d4a964f81b6220e9d
         * title : 美国被特朗普坑惨了!又有3个铁杆盟友公开唱对台戏!
         * date : 2018-05-12 07:25
         * category : 头条
         * author_name : 大国军情
         * url : http://mini.eastday.com/mobile/180512072544020.html
         * thumbnail_pic_s : http://04.imgmini.eastday.com/mobile/20180512/20180512_fe1bf1b6ec00098f9455c84dc81e6763_cover_mwpm_03200403.jpg
         * thumbnail_pic_s02 : http://04.imgmini.eastday.com/mobile/20180512/20180512_3f636fca330f2311583896aed3185196_cover_mwpm_03200403.jpg
         * thumbnail_pic_s03 : http://04.imgmini.eastday.com/mobile/20180512/20180512_793fab03dadcd417bf2d8e5e1e48a0f5_cover_mwpm_03200403.jpg
         */

        private String uniquekey;
        private String title;
        private String date;
        private String category;
        private String author_name;
        private String url;
        private String thumbnail_pic_s;
        private String thumbnail_pic_s02;
        private String thumbnail_pic_s03;

        public String getUniquekey() {
            return uniquekey;
        }

        public void setUniquekey(String uniquekey) {
            this.uniquekey = uniquekey;
        }

        public String getTitle() {
            return title;
        }

        public void setTitle(String title) {
            this.title = title;
        }

        public String getDate() {
            return date;
        }

        public void setDate(String date) {
            this.date = date;
        }

        public String getCategory() {
            return category;
        }

        public void setCategory(String category) {
            this.category = category;
        }

        public String getAuthor_name() {
            return author_name;
        }

        public void setAuthor_name(String author_name) {
            this.author_name = author_name;
        }

        public String getUrl() {
            return url;
        }

        public void setUrl(String url) {
            this.url = url;
        }

        public String getThumbnail_pic_s() {
            return thumbnail_pic_s;
        }

        public void setThumbnail_pic_s(String thumbnail_pic_s) {
            this.thumbnail_pic_s = thumbnail_pic_s;
        }

        public String getThumbnail_pic_s02() {
            return thumbnail_pic_s02;
        }

        public void setThumbnail_pic_s02(String thumbnail_pic_s02) {
            this.thumbnail_pic_s02 = thumbnail_pic_s02;
        }

        public String getThumbnail_pic_s03() {
            return thumbnail_pic_s03;
        }

        public void setThumbnail_pic_s03(String thumbnail_pic_s03) {
            this.thumbnail_pic_s03 = thumbnail_pic_s03;
        }
    }
}

RecyclerViewAdapter类

public class RecyclerViewAdapter extends Adapter {
    private List<User.DataBean> list;
    private Context mcontext;

    //3.全局变量
    private RecycleitemClick click;

    public RecyclerViewAdapter(Context context, List<User.DataBean> list) {
        this.mcontext=context;
        this.list=list;
    }

    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int position) {

        View view;
        RecyclerView.ViewHolder holder = null;

        switch (position) {
            case 1:
                view = LayoutInflater.from(mcontext).inflate(R.layout.item, viewGroup, false);
                //传入点击事件
                holder = new MyViewHolder(view, click);
                break;
            case 2:
                view = LayoutInflater.from(mcontext).inflate(R.layout.item1, viewGroup, false);
                holder = new MyViewHolder2(view, click);
                break;
        }
        return holder;
    }

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

        User.DataBean bean = list.get(position);
        switch (getItemViewType(position)) {
            case 1:
                Picasso.with(mcontext).load(bean.getThumbnail_pic_s()).into(((MyViewHolder) viewHolder).image1);
                ((MyViewHolder) viewHolder).text1.setText(bean.getAuthor_name());
                break;
            case 2:
                Picasso.with(mcontext).load(bean.getThumbnail_pic_s()).into(((MyViewHolder2) viewHolder).image2);
                Picasso.with(mcontext).load(bean.getThumbnail_pic_s02()).into(((MyViewHolder2) viewHolder).image3);
                ((MyViewHolder2) viewHolder).text2.setText(bean.getAuthor_name());
                break;
        }
    }

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

    //删除
    public void removeDate(int position) {
        list.remove(position);
        notifyItemRemoved(position);
        notifyDataSetChanged();
    }

    //添加
    public void addDate(int position) {
        list.add(position, list.get(position));
        notifyDataSetChanged();
    }

    //更新
    public void updataDate(int position) {
        list.set(position, list.get(position));
        notifyItemChanged(position);
    }

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

    //定义接口
    public interface RecycleitemClick {
        void OnItemView(View view, int postion);
    }

    //实例化
    public void setRecyclerOnClick(RecycleitemClick click) {
        this.click = click;
    }

    class MyViewHolder extends RecyclerView.ViewHolder {

        ImageView image1;
        TextView text1;

        public MyViewHolder(View itemView, final RecycleitemClick click) {
            super(itemView);

            text1 = itemView.findViewById(R.id.text1);
            image1 = itemView.findViewById(R.id.image1);
            //条目点击事件
            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    click.OnItemView(view, getAdapterPosition());
                }
            });
        }
    }

    class MyViewHolder2 extends RecyclerView.ViewHolder {

        TextView text2;
        ImageView image2;
        ImageView image3;

        public MyViewHolder2(View itemView, final RecycleitemClick click) {
            super(itemView);

            text2 = itemView.findViewById(R.id.text2);
            image2 = itemView.findViewById(R.id.image2);
            image3 = itemView.findViewById(R.id.image3);
            //条目点击事件
            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    click.OnItemView(view, getAdapterPosition());
                }
            });
        }
    }
}

MainActvity

public class MainActivity extends AppCompatActivity {

    private RecyclerView recyclerView;
    private RecyclerViewAdapter recyclerViewAdapter;
    private List<User.DataBean> list=new ArrayList<>();
    private String path="http://www.xieast.com/api/news/news.php?page=1";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        recyclerView = findViewById(R.id.recycler);
        Tools tools = new Tools();

        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
        recyclerView.setLayoutManager(linearLayoutManager);

        DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(this, DividerItemDecoration.VERTICAL);
        dividerItemDecoration.setDrawable(ContextCompat.getDrawable(this,R.drawable.fen));
        recyclerView.addItemDecoration(dividerItemDecoration);
        tools.get(path).setData(new Tools.HttpDate() {
            @Override
            public void getDate(String s) {

                Gson gson = new Gson();
                User user = gson.fromJson(s, User.class);
                list.addAll(user.getData());
                runOnUiThread(new Runnable() {


                    @Override
                    public void run() {
                        recyclerViewAdapter = new RecyclerViewAdapter(MainActivity.this,list);
                       recyclerViewAdapter.setRecyclerOnClick(new RecyclerViewAdapter.RecycleitemClick() {
                           @Override
                           public void OnItemView(View view, int postion) {
                               recyclerViewAdapter.updataDate(postion);
                               recyclerViewAdapter.removeDate(postion);
                               recyclerViewAdapter.addDate(postion);
                               Toast.makeText(MainActivity.this,postion+"",Toast.LENGTH_SHORT).show();
                           }
                       });
                        recyclerView.setAdapter(recyclerViewAdapter);
                    }
                });

            }
        });
    }
}

item布局

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

    <TextView
        android:id="@+id/text1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="aaaaa"
        android:textColor="@color/colorAccent" />

    <ImageView
        android:id="@+id/image1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        tools:srcCompat="@tools:sample/avatars" />
</LinearLayout>

多条目item2

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

    <TextView
        android:id="@+id/text2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="bbbb"
        android:textColor="@color/colorPrimary" />

    <ImageView
        android:id="@+id/image2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        tools:srcCompat="@tools:sample/avatars" />

    <ImageView
        android:id="@+id/image3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        tools:srcCompat="@tools:sample/avatars" />

</LinearLayout>

分割线布局 在drawable里创建shape

<?xml version="1.0" encoding="utf-8"?>
<shape
    android:shape="rectangle"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <gradient
        android:type="linear"
        android:startColor="@color/colorAccent"
        />
    <size
        android:height="5dp"
        />
</shape>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RecyclerViewOkHttp 都是 Android 开发中非常常用的库。 RecyclerView 是 Android 官方在 API level 21 中推出的一个用于列表展示的组件,相比起 ListView,RecyclerView 的优点在于支持更加丰富的布局和动画,并且可以通过 ViewHolder 模式进行更高效的显示和数据更新。而且它也可以很好地与其他组件进行集成,比如 SwipeRefreshLayout、ItemTouchHelper 等等,为开发者提供了更丰富的选项。 而 OkHttp 则是一款非常流行的 HTTP 客户端库,它的优点在于简单易用,性能好且支持丰富的功能。通过 OkHttp,我们可以轻松地发起 HTTP 请求,并且可以直接将响应数据转化为常用的格式(比如 JSON)。同时,OkHttp 也支持网络拦截器、缓存、连接池、SSL、WebSocket 等特性,从而满足开发者在实际开发中的需求。 结合 RecyclerViewOkHttp,我们可以实现许多常见的需求。比如,我们可以通过 OkHttp 发起网络请求获取数据,并且通过 RecyclerView 将这些数据在列表中进行展示。我们也可以通过 OkHttp 实现图片的异步加载,并且使用 RecyclerView 实现图片列表的展示。当然,如果需要更加高级的功能,比如分页、筛选、搜索等,开发者也可以借助 OkHttpRecyclerView 的优势来实现这些功能。 综上所述,RecyclerViewOkHttp 都是非常好用的 Android 库,开发者在日常工作中都会频繁使用它们。当然,开发者也需要结合自身的实际情况,根据项目需求来选择合适的库,从而更快更好地进行开发。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值