RecyclerView + SpringView 的混合使用

来源:互联网 发布:淘宝流量券在哪里查看 编辑:程序博客网 时间:2024/05/17 08:22
第一步先写依赖,recyclerview 的依赖会和appcompat的依赖冲突把recycler的依赖版本改成和appcompat一样的就好(记住加网络权限)compile 'com.android.support:appcompat-v7:25.3.1'compile 'com.android.support.constraint:constraint-layout:1.0.2'testCompile 'junit:junit:4.12'compile 'com.android.support:recyclerview-v7:25.3.1'compile files('libs/universal-image-loader-1.9.3-with-sources.jar')compile files('libs/glide-3.7.0.jar') compile 'com.yqritc:recyclerview-flexibledivider:1.4.0'这个是分割线的依赖compile 'com.liaoinstan.springview:library:1.2.6'接下来导入glide的包来读入图片下面是布局 主页面的布局 就是一个springview包裹了一个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="com.example.chenyunfeid.MainActivity"><com.liaoinstan.springview.widget.SpringView    android:id="@+id/sv"    android:layout_width="match_parent"    android:layout_height="match_parent">   <android.support.v7.widget.RecyclerView       android:id="@+id/recycler"       android:layout_width="match_parent"       android:layout_height="match_parent"></android.support.v7.widget.RecyclerView></com.liaoinstan.springview.widget.SpringView></LinearLayout>下面是viewholder要用的布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"    >    <ImageView        android:id="@+id/iv"        android:layout_width="match_parent"        android:layout_height="300dp" />    </LinearLayout>接下来是MainActivity
public class MainActivity extends AppCompatActivity {    //定义一个list    List<String> list=new ArrayList<String>();    SpringView sp;//初始化控件    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //初始化控件       RecyclerView recyclerView= (RecyclerView) findViewById(R.id.recycler);       sp = (SpringView) findViewById(R.id.sv);        //list里面增加数据        list.add("http://f10.baidu.com/it/u=2881303562,336932824&fm=72");        list.add("http://f11.baidu.com/it/u=681755471,2018070071&fm=72");        list.add("http://f10.baidu.com/it/u=960650584,863938083&fm=72");        list.add("http://img0.imgtn.bdimg.com/it/u=783060973,4278100629&fm=27&gp=0.jpg");        list.add("http://img1.imgtn.bdimg.com/it/u=3743124979,3234956668&fm=27&gp=0.jpg");        list.add("http://img4.imgtn.bdimg.com/it/u=3468613159,957707785&fm=27&gp=0.jpg");        list.add("http://img3.imgtn.bdimg.com/it/u=2971205354,485034289&fm=27&gp=0.jpg");        list.add("http://f10.baidu.com/it/u=2881303562,336932824&fm=72");        list.add("http://f11.baidu.com/it/u=681755471,2018070071&fm=72");        list.add("http://f10.baidu.com/it/u=960650584,863938083&fm=72");        list.add("http://img0.imgtn.bdimg.com/it/u=783060973,4278100629&fm=27&gp=0.jpg");        list.add("http://img1.imgtn.bdimg.com/it/u=3743124979,3234956668&fm=27&gp=0.jpg");        list.add("http://img4.imgtn.bdimg.com/it/u=3468613159,957707785&fm=27&gp=0.jpg");        list.add("http://img3.imgtn.bdimg.com/it/u=2971205354,485034289&fm=27&gp=0.jpg");       // LinearLayoutManager manager=new LinearLayoutManager(this);       // StaggeredGridLayoutManager gridLayoutManager=new StaggeredGridLayoutManager(this);         //设置管理者 new的部分可以换LinearLayoutManager 当前的是瀑布式布局 后面参数是几行的个数,和方向        recyclerView.setLayoutManager(new StaggeredGridLayoutManager(3, LinearLayout.VERTICAL));   //设置适配器  参数是一个上下文,和list的集合        RecyckerAdaper adaper=new RecyckerAdaper(this,list);        //启动适配器        recyclerView.setAdapter(adaper);        //添加下划线        recyclerView.addItemDecoration(new HorizontalDividerItemDecoration.Builder(this)         .color(Color.BLUE)                .build());        //接口回调的方法,用来toast用的4.调用定义的构造方法 来完成接口回调 使用adaper        adaper.setLLiencli(new RecyckerAdaper.Sitenner() {            @Override            public void click(View view, int position) {                Toast.makeText(MainActivity.this,"wahahhaa",Toast.LENGTH_SHORT).show();            }            @Override            public void Longclick(View view, int position) {                Toast.makeText(MainActivity.this,"niahhahahha",Toast.LENGTH_SHORT).show();            }        });        //设置springview的头和尾        sp.setHeader(new DefaultHeader(this));        sp.setFooter(new DefaultFooter(this));        //设置springview的刷新和加载的方法     sp.setListener(new SpringView.OnFreshListener() {         @Override         public void onRefresh() {             Toast.makeText(getApplicationContext(),"下拉刷新中",Toast.LENGTH_SHORT).show();             //这个方法就是在刷新或者加载1秒的时间后关闭             finishFreshAndLoad();         }         @Override         public void onLoadmore() {             Toast.makeText(getApplicationContext(),"玩命加载中...",Toast.LENGTH_SHORT).show();             finishFreshAndLoad();         }     });    }  //来设置刷新时间的    private void finishFreshAndLoad() {        new Handler().postDelayed(new Runnable() {            @Override            public void run() {                sp.onFinishFreshAndLoad();            }        }, 1000);    }}最后一个就是Adaper的类 在这里使用的接口回调
public class RecyckerAdaper extends RecyclerView.Adapter<RecyckerAdaper.ViewHolder> {    private Context context;//初始化上下文    public List list; //list集合 这个list集合没有参数    public int itemwidth; //定义一个宽   //重写一个有参的方法    public RecyckerAdaper(Context context, List list) {        //上下文和集合        this.context = context;        this.list = list;        //获取屏幕的高和宽        WindowManager wm = (WindowManager) context                .getSystemService(Context.WINDOW_SERVICE);        int width = wm.getDefaultDisplay().getWidth();        //得到的每个item的宽度  一行三个item        itemwidth=width/3;    }    @Override    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {        //加载布局        View view=LayoutInflater.from(context).inflate(R.layout.layout_item,null);        // 返回ViewHolder的方法        return new ViewHolder(view);    }    @Override    //绑定数据    public void onBindViewHolder(ViewHolder holder, final int position) {    //Glide来加载图片        Glide.with(context).load(list.get(position)).into(holder.iv);        //设置一个默认的图片           holder.iv.setImageResource(R.mipmap.ic_launcher);       holder.tv.setText(position+"");        //动态的来设置高宽的        LinearLayout.LayoutParams params= (LinearLayout.LayoutParams) holder.iv.getLayoutParams();        //给了一个指定的高        int itemheight=300;        //最大限度是500        itemheight =new Random().nextInt(500);        //判断这个高小于300的话        if(itemheight<300)        {            itemheight=300;        }        //设置宽度        params.width=itemwidth;        //设置高度        params.height=itemheight;        //把设置好的高和宽设置给图片        holder.iv.setLayoutParams(params);   //给图片添加点击事件        holder.iv.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                //3.调用构造方法里面的参数调用写的方法                if(sienclic!=null)                {                    sienclic.click(v,position);                }            }        });        //长按事件        holder.iv.setOnLongClickListener(new View.OnLongClickListener() {            @Override            public boolean onLongClick(View v) {                sienclic.Longclick(v,position);                return false;            }        });    }    @Override    //time的数量    public int getItemCount() {        //返回集合的长度        return list.size();    }   //定义的viewholder    public class ViewHolder extends RecyclerView.ViewHolder {        ImageView iv;        TextView tv;        //holder        public ViewHolder(View itemView) {            super(itemView);            //初始化控件             iv= (ImageView) itemView.findViewById(R.id.iv);              tv= (TextView) itemView.findViewById(R.id.tvv);        }    }    //定义的接口回调    private   Sitenner sienclic;    //接口回调的步骤 1.定义一个接口    //2.设置一个构造方法    public   void setLLiencli(Sitenner sienclic){        this.sienclic=sienclic;    }    //1.定义接口 写俩个方法   public interface  Sitenner{        public  void click(View view,int position);        public  void Longclick(View view,int position);    }}







阅读全文
0 0
原创粉丝点击