RecyclerView+OKHttp+MVP网络数据请求,删除条目

//首先添加依赖

	//Recyclerview是listview的升级版
    implementation 'com.android.support:recyclerview-v7:28.0.0'
    //okhttp
    implementation 'com.squareup.okhttp3:okhttp:3.10.0'
    //Glide请求网络图片
    implementation 'com.github.bumptech.glide:glide:3.7.0'
    //解析网络请求数据
    implementation 'com.google.code.gson:gson:2.2.4'
//别忘添加权限
 <uses-permission android:name="android.permission.INTERNET"/>

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

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:background="#fff"
        >

        <Button
            android:id="@+id/fan"
            android:layout_width="30dp"
            android:layout_height="30dp"
            android:background="@drawable/fan"
            android:layout_alignParentLeft="true"
            />

        <TextView
            android:text="今日头条"
            android:textSize="25dp"
            android:layout_marginLeft="250dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <Button
            android:id="@+id/xin"
            android:layout_width="30dp"
            android:layout_height="30dp"
            android:background="@drawable/wei"
            android:layout_alignParentRight="true"
            />
    </RelativeLayout>

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

</LinearLayout>
//recycleview  布局

<?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="horizontal"
    >

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <ImageView
            android:id="@+id/image"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:src="@drawable/ic_launcher_background"
            />

        <TextView
            android:id="@+id/t1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="我反问"
            android:textSize="18sp"
            android:layout_marginTop="20dp"
            android:layout_marginLeft="110dp"
            />

        <TextView
            android:id="@+id/t2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="风娃娃服"
            android:textSize="10sp"
            android:layout_marginTop="50dp"
            android:layout_marginLeft="110dp"
            />

    </RelativeLayout>
</LinearLayout>

//适配器
package com.example.zk2mn.adapter;

import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.bumptech.glide.Glide;
import com.example.zk2mn.MainActivity;
import com.example.zk2mn.R;
import com.example.zk2mn.bean.Person;

import java.util.ArrayList;
import java.util.List;

//继承recycleview的adapter方法
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {

    List<Person.DataBean> list;
    MainActivity mMainActivity;

    public MyAdapter(MainActivity mainActivity) {
        mMainActivity = mainActivity;
        list = new ArrayList<>();
    }


    //初始化布局文件
    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View view = View.inflate(mMainActivity,R.layout.recyclerview_text,null);
        ViewHolder holder = new ViewHolder(view);
        return holder;
    }

    //绑定数据
    @Override
    public void onBindViewHolder(@NonNull final ViewHolder viewHolder, int i) {

        viewHolder.t1.setText(list.get(i).getAuthor_name());
        viewHolder.t2.setText(list.get(i).getTitle());

        //使用glide添加图片
        Glide.with(mMainActivity).load(list.get(i).getThumbnail_pic_s()).into(viewHolder.image);


        //设置点击删除事件
        viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int ps = viewHolder.getLayoutPosition();
                mOnrecyclerview.setonclick(ps);
            }
        });

        //设置长按删除事件
        viewHolder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                int ps = viewHolder.getLayoutPosition();
                mOnrecyclerview.setonlongclick(ps);
                return false;
            }
        });
    }

    //返回数量
    @Override
    public int getItemCount() {
        return list.size();
    }

    //设置添加数据的方法
    public void setdate(List<Person.DataBean> datebean) {
        list=datebean;
        notifyDataSetChanged();
    }


    //里面初始化布局文件的属性
    public class ViewHolder extends RecyclerView.ViewHolder {

        TextView t1;
        TextView t2;
        ImageView image;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            t1 = itemView.findViewById(R.id.t1);
            t2 = itemView.findViewById(R.id.t2);
            image = itemView.findViewById(R.id.image);
        }
    }

    //实现删除方法
    public void remove(int i) {
        list.remove(i);
        notifyItemRemoved(i);
        notifyDataSetChanged();
    }


    //定义一个接口
    public interface Onrecyclerview{
        //设置点击删除方法
        void setonclick(int ps);

        //设置长按删除方法
        void setonlongclick(int ps);
    }

    //给他一个假对象
    public Onrecyclerview mOnrecyclerview;

    //返回一个设置方法 供他们调用
    public void setOnrecyclerview(Onrecyclerview onrecyclerview){
        this.mOnrecyclerview = onrecyclerview;
    }


}

//解析接口的数据
package com.example.zk2mn.bean;

import java.util.List;

//解析出接口的数据
public class Person {

    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;
        }
    }
}

//Http类实现网络请求
 package com.example.zk2mn.httputils;
import com.example.zk2mn.bean.Person;
import java.io.IOException;
import java.util.concurrent.TimeUnit;

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;


//创建一个类  把网络请求的代码提出来
public class Http {

    public void getData(String path){

        //创建一个okhttp设置读取时间,连接时间
        OkHttpClient okHttpClient = new OkHttpClient.Builder()
                .connectTimeout(10, TimeUnit.SECONDS)
                .readTimeout(10, TimeUnit.SECONDS)
                .build();

        //创建一个request请求对象   url()里面放入接口
        Request request = new Request.Builder()
                .url(path)
                .build();

        //创建call对象
        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 {
                //把数据封装为string类型
                String str = response.body().string();

                //调用getlist接口回调方法
                mOnhttp.getlist(str);
            }
        });
    }

    //定义一个接口
    public interface Onhttp{
        //返回一个解析完数据的参数
        void getlist(String string);
    }

    //假对象
    Onhttp mOnhttp;

//实现构造方法
    public Http(Onhttp onhttp) {
        mOnhttp = onhttp;
    }
}

//Mainactivity
 package com.example.zk2mn;

import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.animation.PropertyValuesHolder;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.DividerItemDecoration;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.StaggeredGridLayoutManager;
import android.view.View;
import android.widget.Button;

import com.example.zk2mn.adapter.MyAdapter;
import com.example.zk2mn.bean.Person;
import com.example.zk2mn.httputils.Http;
import com.google.gson.Gson;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

public class MainActivity extends AppCompatActivity implements View.OnClickListener,Http.Onhttp{

    private Button fan;
    private Button xin,hei;
    private RecyclerView recy;
    Http mHttp;
    MyAdapter mMyAdapter;
    List<Person.DataBean> list = new ArrayList<>();
    String path = "http://www.xieast.com/api/news/news.php";

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

        mMyAdapter = new MyAdapter(this);

        recy.setAdapter(mMyAdapter);


        //给数据设置为listview视图
        LinearLayoutManager maager = new LinearLayoutManager(this);
        recy.setLayoutManager(maager);
        //添加分割线
        recy.addItemDecoration(new DividerItemDecoration(this,DividerItemDecoration.VERTICAL));

        //调用adapter里面接口回调的方法
        mMyAdapter.setOnrecyclerview(new MyAdapter.Onrecyclerview() {
            @Override
            public void setonclick(int ps) {
                mMyAdapter.remove(ps);
            }

            @Override
            public void setonlongclick(int ps) {
                mMyAdapter.remove(ps);
            }
        });
    }

    private void initData() {
        mHttp.getData(path);

    }


    private void initView() {
        fan = (Button) findViewById(R.id.fan);
        xin = (Button) findViewById(R.id.xin);
        hei = findViewById(R.id.hei);
        recy = (RecyclerView) findViewById(R.id.recy);
        fan.setOnClickListener(this);
        xin.setOnClickListener(this);
        mHttp  = new Http(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.fan:
                finish();

                break;
            case R.id.xin:
                //做平移动画,translationY,translationX new float[]{10f, 20f, 30f, 40f, 60f, 80f}

                ObjectAnimator XAnimator = ObjectAnimator.ofFloat(xin, "translationX", 0f, -670f);
                ObjectAnimator YAnimator = ObjectAnimator.ofFloat(xin, "translationY", 0f, 1110f);
                ObjectAnimator alpha = ObjectAnimator.ofFloat(xin, "alpha", 1f,0f,1f);
                AnimatorSet set = new AnimatorSet();
                set.play(XAnimator).with(YAnimator).with(alpha);
                set.setDuration(3000);
                set.start();
                hei.setVisibility(View.VISIBLE);
                break;
        }
    }

    //解决内存泄漏的问题
    @Override
    protected void onDestroy() {
        super.onDestroy();
        mHttp = null;
    }

    @Override
    public void getlist(String str) {
        Person person = new Gson().fromJson(str, Person.class);
        list = person.getData();
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                mMyAdapter.setdate(list);
            }
        });
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值