强大的RecyclerView实现复杂布局

来源:互联网 发布:sql 累加函数 编辑:程序博客网 时间:2024/06/08 07:30

当然我们提提他的兄弟ListView,这位大哥在android中UI的地位也是举足轻重,几乎存在于你的任何APP上,新闻,淘宝,。。。。。等等,但是ListView也存在大量的不足,性能差,扩展性不好,如果想要实现横向滚动,我也不知道能不能实现,反正没看过别人实现过,以前横向滚动有个Gallery去实现,不过在今天这种已经不需要了,我们可以通过RecyclerView实现横向滚动以及竖向滚动,当然我们还可以实现更加复杂的布局,不哔哔了,直接开始吧
先写子布局,新建sub.xml

<?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="wrap_content"    android:orientation="horizontal">    <ImageView        android:id="@+id/imageView"        android:layout_width="wrap_content"        android:layout_height="wrap_content" />    <TextView        android:id="@+id/textView"        android:layout_width="wrap_content"        android:layout_height="wrap_content" /></LinearLayout>

2.新建目标对象

package com.example.fang.myapplication;/** * Created by fang on 2017/11/12. */public class LayoutList {    int Image;    String text;    public LayoutList(int image, String text) {        Image = image;        this.text = text;    }    public int getImage() {        return Image;    }    public void setImage(int image) {        Image = image;    }    public String getText() {        return text;    }    public void setText(String text) {        this.text = text;    }}

实现适配器

package com.example.fang.myapplication;import android.support.v7.widget.RecyclerView;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import android.widget.TextView;import java.util.List;/** * Created by fang on 2017/11/11. */public class MyViewAdapter extends RecyclerView.Adapter {    List list;    public MyViewAdapter(List list) {        this.list = list;    }    class MyViewHolder extends RecyclerView.ViewHolder{     ImageView imageView;        TextView textView;        public MyViewHolder(View itemView) {            super(itemView);            imageView= (ImageView) itemView.findViewById(R.id.imageView);            textView= (TextView) itemView.findViewById(R.id.textView);        }    }    @Override    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {        //这里我们发现需要绑定一个RecyclerView.ViewHolder,那么我们只能实现它          View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.sub_layout,parent,false);        MyViewHolder myViewHolder=new MyViewHolder(view);        return myViewHolder;    }    @Override    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {  //在这里我们进行数据的绑定工作            LayoutList layoutList= (LayoutList) list.get(position);        ((MyViewHolder)holder).textView.setText(layoutList.getText());        ((MyViewHolder)holder).imageView.setImageResource(layoutList.getImage());    }    @Override    public int getItemCount() {        return list.size();    }}

修改主布局

<?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"    tools:context="com.example.fang.myapplication.MainActivity">    <android.support.v7.widget.RecyclerView        android:id="@+id/RecyclerView"        android:layout_width="match_parent"        android:layout_height="match_parent"></android.support.v7.widget.RecyclerView></LinearLayout>

,最后一步,java主程序

package com.example.fang.myapplication;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity {  List list;    RecyclerView recyclerView;    MyViewAdapter myViewAdapter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);       initinal();        recyclerView= (RecyclerView) findViewById(R.id.RecyclerView);        LinearLayoutManager linear=new LinearLayoutManager(this);        //在这里我们实现的是布局的管理        recyclerView.setLayoutManager(linear);        recyclerView.setAdapter(myViewAdapter);    }    private void initinal() {        list=new ArrayList();        list.add(new LayoutList(R.drawable.one,"暂停"));        list.add(new LayoutList(R.drawable.two,"添加"));        list.add(new LayoutList(R.drawable.three,"上一步"));        list.add(new LayoutList(R.drawable.four,"停止"));        list.add(new LayoutList(R.drawable.five,"播放"));        myViewAdapter=new MyViewAdapter(list);    }}

欧了,在这里我们顺便说一下,LayoutManager用于指定RecyclerView的布局方式,上面我们用的是线性布局。当然RecyclerView也为我们提供了GridLayoutManager和staggeredGridLayoutManager这两种内置的布局排列方式,前者实现的是网格布局,后者实现的是瀑布流,

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