Android开发之RecyclerView的基本使用(实现常用的4种效果)

来源:互联网 发布:java多线程售票系统 编辑:程序博客网 时间:2024/06/13 23:51

recyclerView的强大无需我多言,现在来总结一下recyclerView的常用的4种效果。

第一种效果:listView垂直效果(这个最常用)


第二种效果:gridview效果


第三种效果:水平效果


第四种效果瀑布流效果



-----------------------------------------------------------------华丽的分割线-----------------------------------------------------------------------

开始代码走起......

第一种效果的核心代码(listView垂直显示效果):

mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
第二种效果的核心代码(gridview效果):

mRecyclerView.setLayoutManager(new GridLayoutManager(this, 2));
第三种效果的核心代码(水平效果):
mRecyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, true));
第四种效果的核心代码(瀑布流效果):

mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(3, LinearLayoutManager.VERTICAL));


-----------------------------------------------------------------华丽的分割线-----------------------------------------------------------------------

可能上面区区四行代码对于刚入门的小白有点蒙蔽,好啦下面开始撸起recyclerView的另一个核心之处adapter
新建一个MyRecyclerViewAdapter类继承自RecyclerView.Adapter<MyStaggedRecyclerAdapter.MyViewHolder>
public class MyRecyclerAdapter extends RecyclerView.Adapter<MyRecyclerAdapter.MyViewHolder> {    private ArrayList<String> mList;    public MyRecyclerAdapter(ArrayList<String> list) {        mList = list;    }    @Override    public MyRecyclerAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.listitem, parent, false);        return new MyViewHolder(view);    }    @Override    public void onBindViewHolder(MyRecyclerAdapter.MyViewHolder holder, int position) {        holder.tv.setText(mList.get(position));    }    @Override    public int getItemCount() {        return mList.size();    }    public class MyViewHolder extends RecyclerView.ViewHolder {        private TextView tv;        public MyViewHolder(View itemView) {            super(itemView);            tv = (TextView) itemView.findViewById(R.id.tv);        }    }}

为了更好的显示瀑布流的效果,所以又重新新建一个MyStaggedRecyclerAdapter类继承自RecyclerView.Adapter<MyStaggedRecyclerAdapter.MyViewHolder>
public class MyStaggedRecyclerAdapter extends RecyclerView.Adapter<MyStaggedRecyclerAdapter.MyViewHolder> {    private ArrayList<String> mList;    private List<Integer> heights;    public MyStaggedRecyclerAdapter(ArrayList<String> list) {        mList = list;        heights = new ArrayList<Integer>();        for (int i = 0; i < list.size(); i++) {            heights.add((int) (200 + Math.random() * 50));        }    }    @Override    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.listitem, parent, false);        return new MyViewHolder(view);    }    @Override    public void onBindViewHolder(MyViewHolder holder, int position) {        //绑定数据        LayoutParams layoutParams = holder.tv.getLayoutParams();        layoutParams.height = heights.get(position);        holder.tv.setBackgroundColor(Color.rgb(100, (int) (Math.random() * 255), (int) (Math.random() * 255)));        holder.tv.setLayoutParams(layoutParams);        holder.tv.setText(mList.get(position));    }    @Override    public int getItemCount() {        return mList.size();    }    public class MyViewHolder extends RecyclerView.ViewHolder {        private TextView tv;        public MyViewHolder(View itemView) {            super(itemView);            tv = (TextView) itemView.findViewById(R.id.tv);        }    }
}

MainActivity代码:
public class MainActivity extends AppCompatActivity {    private RecyclerView mRecyclerView;    private ArrayList<String> mList;    private MyRecyclerAdapter mRecyclerAdapter;    private MyStaggedRecyclerAdapter myStaggedRecyclerAdapter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mRecyclerView = (RecyclerView) findViewById(R.id.rv);        mRecyclerAdapter = new MyRecyclerAdapter(getData());//        mRecyclerView.setLayoutManager(new LinearLayoutManager(this));//默认listView垂直效果//        mRecyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, true));//        mRecyclerView.setLayoutManager(new GridLayoutManager(this, 2));//gridview效果        myStaggedRecyclerAdapter = new MyStaggedRecyclerAdapter(getData());        //瀑布流效果        mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(3, LinearLayoutManager.VERTICAL));        mRecyclerView.setAdapter(myStaggedRecyclerAdapter);    }    protected ArrayList<String> getData() {        mList = new ArrayList<String>();        for (int i = 0; i < 30; i++) {            mList.add("第" + i + "个item");        }        return mList;    }}

切记要导入recyclerView的支持包。
build.gradle里面加入:compile 'com.android.support:recyclerview-v7:25.2.0'即可
dependencies {    compile fileTree(include: ['*.jar'], dir: 'libs')    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {        exclude group: 'com.android.support', module: 'support-annotations'    })    compile 'com.android.support:appcompat-v7:24.2.1'    testCompile 'junit:junit:4.12'    compile 'com.android.support:recyclerview-v7:25.2.0'}

-----------------------------------------------------------------华丽的分割线-----------------------------------------------------------------------
下一章继续实现recyclerView的其他效果。。。







2 0