zoukankan      html  css  js  c++  java
  • RecyclerView(滚动控件)的用法

    1.首先在build.gradle中添加依赖库

      compile 'com.android.support:recyclerview-v7:24.2.1'

    2.修改activity_main.xml

    <LinearLayout ......
        <android.support.v7.widget.RecyclerView
            android:id="@+id/recycler_view"
            android:layout_width="maych_parent"
            android:layout_height="match_parent" />
    </LinearLayout>

    3.类似ListView,新建一个适配器FruitAdapter,定义一个ViewHolder内部类,传入一个View参数,重写onCreateViewHolder()、onBindViewHolder()、getItemCount()

    public class FruitAdapter extends RecyclerView.Adapter<FruitAdapter.ViewHolder>{
        private List<Fruit> mFruitList;
        static class ViewHolder extends RecyclerView.ViewHolder{
            ImageView Fruitimage;
            TextView FruitName;
      //创建ViewHolder内部类
    public ViewHolder(View view){ super(view); fruitImage = (ImageView)findViewById(R.id.fruit_image); fruitName = (TextView)findViewById(R.id.fruit_name); } } public FruitAdapter(List<Fruit> fruitList){ mFruitList = fruitList; }
      //创建ViewHolder实例 @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent,int viewType){ View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.fruit_item,parent,false); ViewHolder holder = new ViewHolder(view); return holder; }
      //为子项赋值 @Override
    public void onBindViewHolder(ViewHolder holder,int position){ Fruit fruit = mFruitList.get(position); holder.fruitImage.setImageResource(fruit.getImageId()); holder.fruitName.setText(fruit.getName()); }
      //子项的数目 @Override
    public int getItemCount(){ return mFruitList.size(); } }

     4.在MainAcitivity中编写RecyclerView代码

    public class MainActivity extends AppCompatActivity{
        private Lsit<Fruit> fruitList = new ArrayList<>();
        @Override
        protected void onCreate(Bundle savedInstanceState){
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            initFruits();    //初始化水果数据
            RecyclerView recyclerView = (RecyclerView)findViewById(R.id.recycler_view);
            LinearLayoutManager layoutManager = new LinearLayoutManager(this);
            recyclerView.setLayoutManager(layoutManager);    //指定布局方式
            FruitAdapter adapter = new FruitAdapter(fruitList);
            recyclerView.setAdapter(adapter);
        }
        private void initFruits(){
            for(int i=0;i<2;i++){
                Fruit apple = new Fruit("Apple",R.drawable.apple_pic);
                fruitList.add(apple);
                ......
            }
        }
    }

    RecyclerView特殊用法

      ListView只能实现纵向滚动,而RecyclerView可以实现横向和瀑布流。

      横向滚动:

        修改fruit_item.xml中LinearLayout布局方向:android:orientation="vartical";  并将ImageView和TextView设置成水平居中。

        在MainActivity中onCreate()添加:layoutManager.setOrientation(LinearLayoutManger.HORIZONTAL);

      瀑布流:

        调整fruit_item.xml

        在MainActivity中onCreate()添加:staggeredGridLayoutManager layoutManager = staggeredGridLayoutManager(3,StaggeredGridLayoutManger.VERTICAL); //1参:列数,2参:排列方向

    RecyclerView的点击事件

      

    ......
        @Override
        public ViewHolder onCreateViewHolder(ViewGroup parent,int viewType){
            View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.fruit_item,parent,false);
            final ViewHolder holder = new ViewHolder(view);
            holder.fruitView.setOnClickListener(new View.onClickListener(){
                @Override
                public void onClick(View v){
                    int position = holder.getAdapterPosition();
                    Fruit fruit = mFruitList.get(position);
                    Toast.makeText(v.getContext(),"you clicked view"+fruit.getName(),Toast.LENGTH_SHORT).show();
                }
            });
            holder.fruitImage.setOnClickListener(new View.onClickListener(){
                @Override
                public void onClick(View v){
                    int position = holder.getAdapterPosition();
                    Fruit fruit = mFuritList.get(position);
                    Toast.makeText(v.getContext(),"you clicked image"+fruit.getName(),Toast.LENGTH_SHORT).show();
                }
            });
            return holder;
        }
    ......

        

  • 相关阅读:
    jmeter循环发送http请求
    判断字符串是否为日期格式
    正则表达式的部分替换 $1~$99
    js验证上传文件大小
    mongodb主从备份 和 手动主从切换
    openproject安装与使用
    软件项目开发常见错误
    使用selenium的WebDriver和ChromeDriver实现UI自动化
    shell ssh远程执行命令
    Flask入门
  • 原文地址:https://www.cnblogs.com/yl-saber/p/6400751.html
Copyright © 2011-2022 走看看