资讯专栏INFORMATION COLUMN

Android Studio教程11-RecycleView的使用

李文鹏 / 696人阅读

摘要:目录将添加到布局主中如何调用对象重写定义实例将添加到布局此文件命名为线性布局网格布局瀑布布局主中如何调用对象的三部曲获取对象添加水平分割线如果传入则该布局支持纵向滑动,那么前面的则指的是列。

目录

  • 1. RecyclerView
    • 1.1. Add support library
    • 1.2. 将RecyclerView添加到布局
    • 1.3. 主actiivty中如何调用recycleview对象
    • 1.4. 重写定义Adapter
  • 2. 实例
1. RecyclerView 1.1. Add support library
dependencies {
    implementation "com.android.support:recyclerview-v7:28.0.0"
}
1.2. 将RecyclerView添加到布局

此文件命名为:activity_recycle_demo.xml




    

        
1.3. 主actiivty中如何调用recycleview对象

RecycleDemoActivity.java

package com.haoch95.fristapp;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.DividerItemDecoration;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.StaggeredGridLayoutManager;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

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

public class RecycleDemoActivity extends AppCompatActivity {

    private Button linearBT, gridBT, starBT;

    private RecyclerView mRecyclerView;
    private RecycleAdapter mMyAdapter;
    private RecyclerView.LayoutManager mLayoutManager;
    private List list;


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

        linearBT = (Button)findViewById(R.id.linearLayout_recycle);
        gridBT = (Button)findViewById(R.id.grid_recycle);
        starBT = (Button)findViewById(R.id.staggeredLayout_recycle);
        // RecyclerView的三部曲 01: 获取RecyclerView对象
        mRecyclerView = (RecyclerView)findViewById(R.id.my_recycler_view);

        initData();

        linearBT.setOnClickListener(new ButtonClicked());
        gridBT.setOnClickListener(new ButtonClicked());
        starBT.setOnClickListener(new ButtonClicked());




//        // 添加水平分割线
//        mRecyclerView.addItemDecoration(new DividerItemDecoration(this,DividerItemDecoration.VERTICAL));

    }

    private void initData() {
        list = new ArrayList<>();
        for (int i=0;i<20;i++){
            list.add("Item" + i);
        }
    }

    class ButtonClicked implements View.OnClickListener {
        @Override
        public void onClick(View v) {
            switch (v.getId()){
                case R.id.linearLayout_recycle:
                    mLayoutManager = new LinearLayoutManager(getApplicationContext());
                    break;
                case R.id.grid_recycle:
                    mLayoutManager = new GridLayoutManager(getApplicationContext(),4);
                    break;
                case R.id.staggeredLayout_recycle:
                    //如果传入 StaggeredGridLayoutManager.VERTICAL则该布局支持纵向滑动,那么前面的 4 则指的是 4列。
                    //如果传入 StaggeredGridLayoutManager.HORIZONTAL,则该布局支持横向滑动,那么前面的4 则指的是 4行
                    mLayoutManager = new StaggeredGridLayoutManager(4,StaggeredGridLayoutManager.VERTICAL);
                    break;
                default:
                    mLayoutManager = new LinearLayoutManager(getApplicationContext());
                    break;
            }
            //RecyclerView的三部曲 02:设置布局管理器
            mRecyclerView.setLayoutManager(mLayoutManager);
            mRecyclerView.addItemDecoration(new DividerItemDecoration(getApplicationContext(),DividerItemDecoration.VERTICAL));
            // RecyclerView的三部曲 03: 添加适配器,适配器需要重写
            mMyAdapter = new RecycleAdapter(list, getApplicationContext());
            mRecyclerView.setAdapter(mMyAdapter);
            //设置Item增加、移除动画
            mRecyclerView.setItemAnimator(new DefaultItemAnimator());

        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.add:
                mMyAdapter.addData(1);
                break;
            case R.id.delete:
                mMyAdapter.removeData(1);
                break;
        }
        return true;
    }
}
1.4. 重写定义Adapter

RecycleAdapter


package com.haoch95.fristapp;

import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;

import java.util.List;
import java.util.Random;

public class RecycleAdapter extends RecyclerView.Adapter {

    private List mList;
    private Context context;

    public RecycleAdapter(List list, Context context){
        this.mList = list;
        this.context = context;
    }

    @Override
    public int getItemCount() {
        return mList.size();
    }


    public class MyViewHolder extends RecyclerView.ViewHolder {

        public TextView mView;

        public MyViewHolder(@NonNull View itemView) {
            super(itemView);
            mView = itemView.findViewById(R.id.text_view);
        }
    }

    //创建ViewHolder
    //onCreateViewHolder方法创建一个viewHolder,viewholder可以理解为一条数据的展示布局,这里我们自定义类LinearViewHolder创建一个只有TextView的item
    //这里我们需要创建每条布局使用的layout:recycle_item
    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        return new MyViewHolder(LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.recycle_item, viewGroup, false));
    }


    //填充视图
    //onBindViewHolder方法为item的UI绑定展示数据
    @Override
    public void onBindViewHolder(@NonNull final MyViewHolder holder, final int position) {
        holder.mView.setText(mList.get(position));

        holder.itemView.setOnClickListener(new View.OnClickListener(){

            @Override
            public void onClick(View v) {
                Toast.makeText(context, "点击子项"+position, Toast.LENGTH_SHORT).show();
            }
        });

    }

    public void addData(int position) {
        mList.add(position, "Insert One");
        notifyItemInserted(position);
    }

    public void removeData(int position) {
        mList.remove(position);
        notifyItemRemoved(position);
    }

    public void clearALL(){
        mList.clear();
        notifyDataSetChanged();
    }


}
2. 实例

本节中的所有代码已上传到:https://github.com/haochen95

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/2526.html

相关文章

  • 史上最详细Android Studio系列教程三--快捷键

    摘要:原文链接正式版发布啦今天是个大日子,终于发布了正式版,这对于开发者来说简直是喜大普奔的大消息啊,那么就果断来下载使用。官方下载地址如果你之前已经使用其他版本的,那么直接覆盖就好了,如果是第一次使用,那么参照系列教程一进行安装配置。 原文链接:http://stormzhang.com/devtools/2014/12/09/android-studio-tutorial3/ ...

    CoffeX 评论0 收藏0
  • Android学习路线图

    摘要:我是如何自学,资料分享最近知乎上有网友问我怎么自学,其实说实在的,我学的也一塌糊涂,当然在学习过程也积累了一些知识,对于以前没接触过的朋友,或者刚入门的朋友,这篇文章作为入门,那是再合适不过了,希望对刚入门的朋友有帮助,接下来,就不罗嗦啦。 我是如何自学Android,资料分享 最近知乎上有网友问我怎么自学Android,其实说实在的,我学的也一塌糊涂,当然在学习过程也积累了一些知识,...

    netmou 评论0 收藏0
  • 「码个蛋」2017年200篇精选干货集合

    摘要:让你收获满满码个蛋从年月日推送第篇文章一年过去了已累积推文近篇文章,本文为年度精选,共计篇,按照类别整理便于读者主题阅读。本篇文章是今年的最后一篇技术文章,为了让大家在家也能好好学习,特此花了几个小时整理了这些文章。 showImg(https://segmentfault.com/img/remote/1460000013241596); 让你收获满满! 码个蛋从2017年02月20...

    wangtdgoodluck 评论0 收藏0
  • 教程】搭配Android studio,如何实现app远程真机debug...

    摘要:云端和上显示的地址一定要一致这时在云手机的页面,你会看到请求远程连接的提示,点击确定。现在你可以用调试了当你的电脑通过前面的操作连接到了云手机,你就获得了这台手机的最大控制权。 用了很久的模拟器,今天给大家分享一个不用模拟器,在没有手机的情况下,如何实现真机debug的教程,第一次发文章,非喜勿喷,望支持下! 废话少说,先睹为快。在不用数据线连接手机的情况下,先来个打断点截图。。。 s...

    txgcwm 评论0 收藏0
  • windows系统安装配置react-native运行环境

    摘要:把目录添加到环境变量中打开控制面板系统和安全系统高级系统设置高级环境变量,选中变量,然后点击编辑。 最近公司要开发react-native项目,自己在windows系统上练习了一下,过程中发现好多问题,在这里整理出来供大家参考; 一、首先来看一下reactNative官网 官网上的教程很详细,介绍了IOS和Android的环境搭建、示例教程等等,建议大家先按照官网的环境搭建教程尝试搭...

    SunZhaopeng 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<