RecyclerView实现侧滑和网络断点续传

本文实例为大家分享了RecyclerView实现侧滑和网络断点续传的具体代码,供大家参考,具体内容如下

RecyclerView侧滑

主布局

<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=".MainActivity">

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

</LinearLayout>

侧滑布局

<com.daimajia.swipe.SwipeLayout
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
    android:layout_height="wrap_content">
<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">
    <Button
        android:text="删除"
        android:id="@+id/b2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <Button
        android:text="添加"
        android:id="@+id/b3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</LinearLayout>

<TextView
    android:textSize="20dp"
    android:id="@+id/t1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

</com.daimajia.swipe.SwipeLayout>

适配器

public class MyAdapter1 extends RecyclerView.Adapter<MyAdapter1.RVHolder> {

ArrayList<String> list= new ArrayList<>();
public void refershData(ArrayList<String> mlist){
    list.addAll( mlist);
    notifyDataSetChanged();
}
@NonNull
@Override
public RVHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
    View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.name1,viewGroup,false);
    return new RVHolder(view);
}

@Override
public void onBindViewHolder(@NonNull RVHolder rvHolder, final int i) {
    rvHolder.textView.setText(list.get(i));
    rvHolder.button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            isonclick.itemonclick(i);
        }
    });

}

public interface Isonclick{
    public void itemonclick(int id);
}
Isonclick isonclick;

public void  Onclick(Isonclick isonclick) {
    this.isonclick = isonclick;
}
@Override
public int getItemCount() {
    return list.size();
}

class RVHolder extends RecyclerView.ViewHolder{
    TextView textView;
    Button button;
    public RVHolder(@NonNull View itemView) {
        super(itemView);
        textView = itemView.findViewById(R.id.t1);
        button = itemView.findViewById(R.id.b2);
    }
}
}

Activity

public class MainActivity extends AppCompatActivity {
RecyclerView recyclerView;

MyAdapter1 myAdapter1;

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

    init();
    initData();

}

private void init() {
    recyclerView = findViewById(R.id.myrecycler);
    final LinearLayoutManager manager = new LinearLayoutManager(this);
    manager.setOrientation(LinearLayoutManager.VERTICAL);
    recyclerView.setLayoutManager(manager);

    myAdapter1 = new MyAdapter1();
    recyclerView.setAdapter(myAdapter1);

    myAdapter1.Onclick(new MyAdapter1.Isonclick() {
        @Override
        public void itemonclick(int id) {
            myAdapter1.list.remove(id);
            myAdapter1.notifyDataSetChanged();
        }
    });

}

public void initData(){
   ArrayList<String> list= new ArrayList<>();
    for (int i=0;i<80;i++){
        list.add("第"+i+"个");
    }
    myAdapter1.refershData(list);

}
}

效果

网络断点续传

public class Demo extends AppCompatActivity implements View.OnClickListener {

long start = 0;
long end = 1024*1024;
long max;
int time = 0;
int sum = 0;

SeekBar bar;
Button jixu;
Button parse;

int temp;

Handler handler = new Handler(){
    @Override
    public void handleMessage(Message msg) {
        switch (msg.what){
            case 100:
                if(msg.obj != null){
                    if(time < 5){
                        new MyThread().start();
                        time++;
                    }else if(sum >= max){
                        handler.sendEmptyMessage(200);
                    }
                    Log.e("##########",msg.obj.toString());
                }
                break;
                case 200:
                    Log.e("###########","下载完成");
                    break;
            case 300:
                bar.setProgress(sum);
                break;
        }
    }
};

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

    initView();
    try {
        max = new MyTask().execute("http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4").get();
        bar.setMax((int) max);
    } catch (ExecutionException e) {
        e.printStackTrace();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    new MyThread().start();
}

@Override
public void onClick(View v) {
    switch (v.getId()){
        case R.id.start:
            if(temp >= 0) {
                time = temp;
                temp = -1;
                new MyThread().start();
            }
            break;
        case R.id.parse:
            temp = time;
            time = 5;
            Message message = new Message();
            message.what = 100;
            handler.sendMessage(message);
            break;
            default:
                break;
    }
}

class MyTask extends AsyncTask<String,String,Integer>{
    @Override
    protected Integer doInBackground(String... strings) {
        try {
            URL url = new URL(strings[0]);
            HttpURLConnection hu = (HttpURLConnection) url.openConnection();
            if(hu.getResponseCode() == 200){
                int length = hu.getContentLength();
                return length;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}

private void initView() {
    bar = findViewById(R.id.bar);
    jixu = findViewById(R.id.start);
    parse = findViewById(R.id.parse);
    jixu.setOnClickListener(this);
    parse.setOnClickListener(this);
}

private class MyThread extends Thread {
    @Override
    public void run() {
        try {
            URL url = new URL("http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4");
            HttpURLConnection hu = (HttpURLConnection) url.openConnection();
            hu.setRequestMethod("GET");
            hu.setDoInput(true);
            hu.setDoOutput(true);
            String path = Environment.getExternalStorageDirectory().getPath();
            File ff = new File(path, "wang.mp4");
            RandomAccessFile file = new RandomAccessFile(ff, "rw");
            file.seek(start);
            hu.setRequestProperty("Range","bytes="+start+"-"+end);
            InputStream is = null;
            if(hu.getResponseCode() == 206){

                int l = 0;
                byte[] b = new byte[1024];
                is = hu.getInputStream();
                while ((l = is.read(b)) != -1){
                    file.write(b,0,l);
                    sum += l;

                    Message msg = new Message();
                    msg.what = 300;
                    handler.sendMessage(msg);
                }

                start = end+1;
                end += 1024*1024;

                Message message = new Message();
                message.what = 100;
                String ss = "正在下载"+start+"--"+end;
                message.obj = ss;
                handler.sendMessage(message);
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • android实现多线程下载文件(支持暂停、取消、断点续传)

    多线程下载文件(支持暂停.取消.断点续传) 多线程同时下载文件即:在同一时间内通过多个线程对同一个请求地址发起多个请求,将需要下载的数据分割成多个部分,同时下载,每个线程只负责下载其中的一部分,最后将每一个线程下载的部分组装起来即可. 涉及的知识及问题 请求的数据如何分段 分段完成后如何下载和下载完成后如何组装到一起 暂停下载和继续下载的实现(wait().notifyAll().synchronized的使用) 取消下载和断点续传的实现 一.请求的数据如何分段 首先通过HttpURLConne

  • Android实现断点续传功能

    本文实例为大家分享了Android实现断点续传的具体代码,供大家参考,具体内容如下 断点续传功能,在文件上传中断时,下次上传同一文件时,能在上次的断点处继续上传,可节省时间和流量 总结规划步骤: 1.给大文件分片,每一个大文件发送前,相对应的创建一个文件夹存放所有分片 2.上传接口,每一个分片上传完成就删掉,直到所有分片上传完成,再删掉存放分片的文件夹,服务器把分片合成完整的文件. 先看分片功能,传入的3个参数分别为源文件地址,分片大小,存放分片的文件夹地址.返回的是分片个数. /**    

  • LRecyclerView侧滑iOS阻塞效果不完整的解决办法

    最近项目中用到下拉刷新与侧滑删除需要同时实现的情形, 所以对LRecyclerView进行了一些了解, 在测试侧滑功能时, 发现iOS阻塞效果不完整, 即当条目处于侧滑状态时, 点击该条目的非侧滑位置时无法自动关闭, 于是对LRecyclerView项目中的自定义 SwipeMenuView进行了分析, 发现在dispatchTouchEvent的down事件中进行了如下的条件判断: if (mViewCache != this) { mViewCache.smoothClose(); mVie

  • android的RecyclerView实现拖拽排序和侧滑删除示例

    在平时开发应用的时候,经常会遇到列表排序.滑动删除的需求.如果列表效果采用的是 ListView 的话,需要经过自定义 View 才能实现效果:但是如果采用的是 RecyclerView 的话,系统 API 就已经为我们提供了相应的功能. 接下来,我们就来看一下怎么用系统 API 来实现排序和删除的效果. 创建 ItemTouchHelper 创建一个 ItemTouchHelper 对象,然后其调用 attachToRecyclerView 方法: RecyclerView recyclerV

  • 详解Android使用OKHttp3实现下载(断点续传、显示进度)

    OKHttp3是如今非常流行的Android网络请求框架,那么如何利用Android实现断点续传呢,今天写了个Demo尝试了一下,感觉还是有点意思 准备阶段 我们会用到OKHttp3来做网络请求,使用RxJava来实现线程的切换,并且开启Java8来启用Lambda表达式,毕竟RxJava实现线程切换非常方便,而且数据流的形式也非常舒服,同时Lambda和RxJava配合食用味道更佳 打开我们的app Module下的build.gradle,代码如下 apply plugin: 'com.an

  • Android recyclerview实现拖拽排序和侧滑删除

    Recyclerview现在基本已经替代Listview了,RecyclerView也越来越好用了  当我们有实现条目的拖拽排序和侧滑删除时  可以直接时候Recyclerview提供的API就可以直接实现了 先贴上主要代码 private void initveiw() { ArrayList<String> items = new ArrayList<>(Arrays.asList("itme1", "item2", "itme

  • Android实现多线程断点续传

    本文实例为大家分享了Android实现多线程断点续传的具体代码,供大家参考,具体内容如下 多线程下载涉及到的知识点: 1.Service的使用:我们在Service中去下载文件:2.Thread的使用:Service本身不支持耗时操作,所以我们要去开启线程:3.Sqlite的使用:使用数据库来存储每个线程下载的文件的进度,和文件的下载情况:4.权限:涉及到文件的读写就要用到权限:5.BroadCastReceiver的使用:通过广播来更新下载进度:6.线程池使用:使用线程池来管理线程,减少资源的

  • RecyclerView进阶:使用ItemTouchHelper实现拖拽和侧滑删除效果

    前言 现在RecyclerView的应用越来越广泛了,不同的应用场景需要其作出不同的改变.有时候我们可能需要实现侧滑删除的功能,比如知乎首页的侧滑删除,又或者长按Item进行拖动与其他Item进行位置的交换,但RecyclerView没有提供现成的API供我们操作,所幸SDK提供了ItemTouchHelper这样一个工具类帮助我们快速实现以上功能.不多说别的,我们来介绍一下ItemTouchHelper. 什么是ItemTouchHelper This is a utility class t

  • android RecyclerView侧滑菜单,滑动删除,长按拖拽,下拉刷新上拉加载

    本文介绍的库中的侧滑效果借鉴自SwipeMenu,并对SipwMenu的源码做了修改与Bug修复,然后才开发出的SwipeRecyclerView. 需要说明的是,本库没有对RecyclerView做大的修改,只是ItemView的封装.看起来是对RecyclerView的修改,其实仅仅是为RecyclerView添加了使用的方法API而已. 本库已经更新了三个版本了,会一直维护下去,根据小伙伴的要求,以后也会添加一些其它功能. SwipeRecyclerView将完美解决这些问题: 以下功能全

  • RecyclerView实现侧滑拖拽功能

    本文实例为大家分享了RecyclerView实现侧滑拖拽功能的具体代码,供大家参考,具体内容如下 准备 ItemDragListener package slideslipdrag; import android.support.v7.widget.RecyclerView; /** * Created on 2018/7/22. * * @desc ItemDragListener */ public interface ItemDragListener { /** * 拖拽 * * @par

随机推荐