Android里面最重要的就是recycleview组件了
类似 qq聊天 淘宝的商品布局 都是recycleView
01
想要了解一个东西 ,最终要的是如果你是AndroidSDK的设计者,你会怎么设计一个能够展示展示不同布局的组件
001
01 你要有一个数据源 ok 没有数据怎么展示
02 要有一个适配器,能够展示不同类型的数据,什么叫适配器.adapter,顾名思义,就是一个能够适配多种布局的容器
03 还要有不同的布局,就是不同的xml文件
04 既然要更具类型来展示,就需要有一个索引
好了,下面是代码

    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {            View view =  inflater.inflate(R.layout.fragment_main, container, false);        先找到他        recyclerView = view.findViewById(R.id.main_recycle);        设置他的方向         recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));        设置他的适配器        recyclerView.setAdapter(new mainAdapter());        return view;    }这个就是适配器  class mainAdapter extends RecyclerView.Adapter {        private List mDataList;        @NonNull        @Override        这个函数就是根据索引来构建不同的布局        这里简单写了一下                 public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {            View inflate;            RecyclerView.ViewHolder viewHolder;            if(i%2!=0){            viewinflate (布局充气机) 把布局填充进去            先在上下文环境中得到她                  要填充的布局                                            inflate  = getLayoutInflater().from(viewGroup.getContext()).inflate(R.layout.mainlayout_one,viewGroup,false);              return new oneViewHolder(inflate);            }else {               inflate = getLayoutInflater().from(viewGroup.getContext()).inflate(R.layout.mianlayout_two,viewGroup,false);               return new twoViewHolder(inflate);            }        }        @Override        填充之后是不是要绑定数据了        这个函数就是绑定数据用的         public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) {        这一步就是根据 得到的类型来写入不同的数据        其实吧         这就是安卓的套路        你只用把该写的步骤写好 安卓底层会根据不同的时期 自己调用他       类似这个函数就是如此 每一个生成的小布局 都会进行这一步 来填充数据 但是具体怎么填充 你说了算                 if(viewHolder instanceof  oneViewHolder){                ((oneViewHolder) viewHolder).textView.setText("hello"+i);            }            if(viewHolder instanceof  twoViewHolder){                ((twoViewHolder) viewHolder).textView.setText("world"+i);            }        }        @Override        得到要展示item的数量,这里简单写了一些 具体要根据 网络的加载 ,一直增加        public int getItemCount() {            return 40;        }    这里就是一个布局 一个holder         public class oneViewHolder extends RecyclerView.ViewHolder{            TextView textView;            这个构造函数 就是上一步 onCreateViewHolder中调用的                     public oneViewHolder(@NonNull View itemView) {                super(itemView);                textView = itemView.findViewById(R.id.main_one_text);            }        }        public class twoViewHolder extends RecyclerView.ViewHolder{            TextView textView;            public twoViewHolder(@NonNull View itemView) {                super(itemView);                textView = itemView.findViewById(R.id.main_two_text);            }        }    }``

整个代码
package com.example.administrator.app04.FourFragment;

import android.content.Context;
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.Fragment;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import com.example.administrator.app04.R;

import java.util.List;

public class main extends Fragment {
RecyclerView recyclerView;
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
private static final String ARG_PARAM1 = “param1”;
private static final String ARG_PARAM2 = “param2”;

private String mParam1;private String mParam2;private OnFragmentInteractionListener mListener;public main() {    // Required empty public constructor}public static main newInstance(String param1, String param2) {    main fragment = new main();    Bundle args = new Bundle();    args.putString(ARG_PARAM1, param1);    args.putString(ARG_PARAM2, param2);    fragment.setArguments(args);    return fragment;}@Overridepublic void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    if (getArguments() != null) {        mParam1 = getArguments().getString(ARG_PARAM1);        mParam2 = getArguments().getString(ARG_PARAM2);    }}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {    View view =  inflater.inflate(R.layout.fragment_main, container, false);    recyclerView = view.findViewById(R.id.main_recycle);    recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));    recyclerView.setAdapter(new mainAdapter());    return view;}// TODO: Rename method, update argument and hook method into UI eventpublic void onButtonPressed(Uri uri) {    if (mListener != null) {        mListener.onFragmentInteraction(uri);    }}@Overridepublic void onAttach(Context context) {    super.onAttach(context);    if (context instanceof OnFragmentInteractionListener) {        mListener = (OnFragmentInteractionListener) context;    } else {        throw new RuntimeException(context.toString()                + " must implement OnFragmentInteractionListener");    }}@Overridepublic void onDetach() {    super.onDetach();    mListener = null;}public interface OnFragmentInteractionListener {    // TODO: Update argument type and name    void onFragmentInteraction(Uri uri);}class mainAdapter extends RecyclerView.Adapter {    private List mDataList;    @NonNull    @Override    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {        View inflate;        RecyclerView.ViewHolder viewHolder;        if(i%2!=0){          inflate  = getLayoutInflater().from(viewGroup.getContext()).inflate(R.layout.mainlayout_one,viewGroup,false);          return new oneViewHolder(inflate);        }else {           inflate = getLayoutInflater().from(viewGroup.getContext()).inflate(R.layout.mianlayout_two,viewGroup,false);           return new twoViewHolder(inflate);        }    }    @Override    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) {        if(viewHolder instanceof  oneViewHolder){            ((oneViewHolder) viewHolder).textView.setText("hello"+i);        }        if(viewHolder instanceof  twoViewHolder){            ((twoViewHolder) viewHolder).textView.setText("world"+i);        }    }    @Override    public int getItemCount() {        return 40;    }    public class oneViewHolder extends RecyclerView.ViewHolder{        TextView textView;        public oneViewHolder(@NonNull View itemView) {            super(itemView);            textView = itemView.findViewById(R.id.main_one_text);        }    }    public class twoViewHolder extends RecyclerView.ViewHolder{        TextView textView;        public twoViewHolder(@NonNull View itemView) {            super(itemView);            textView = itemView.findViewById(R.id.main_two_text);        }    }}

}

还要引入V7包 才能用这个组件

布局代码

<?xml version="1.0" encoding="utf-8"?>


<?xml version="1.0" encoding="utf-8"?>

安卓最烦的就是要下载好多文件,但是由于共党的高墙,实在是牛逼好多时候 都需要手动配置最近一周在汇森  一直以为这的公司都很牛逼 进去之后才发现 妈的 连中国电信的那种傻逼部门都进来了好多傻逼 天天在这看电影 打游戏 操他妈 还他吗打电话 嫩求大声     明天搬回去浪费学校领导的一片苦心 这么好的网速 这么好的环境 就被这群煞笔糟蹋了

更多相关文章

  1. “罗永浩抖音首秀”销售数据的可视化大屏是怎么做出来的呢?
  2. Nginx系列教程(三)| 一文带你读懂Nginx的负载均衡
  3. 不吹不黑!GitHub 上帮助人们学习编码的 12 个资源,错过血亏...
  4. Android中的4.0新布局控件:Space和GridLayout
  5. Android中HttpURLConnection使用详解
  6. Android定位入门(1)了解定位管理器--LocationManager 类
  7. android保存联系人到通讯录
  8. Android中的ListView内容刷新问题
  9. Android(安卓)使用Intent传递数据的实现思路与代码

随机推荐

  1. Python 中的数字到底是什么?
  2. 监控流媒体服务器连接监控摄像头的配置方
  3. 在剪贴板上读取/写入数据,太方便了吧!
  4. Python 为什么不支持 switch 语句?
  5. Python 疑难问题:[] 与 list() 哪个快?为什
  6. AWS上传证书-添加负载均衡
  7. 给你的Excel增加正则处理函数,简直如虎添
  8. 数据分析都有哪些岗位?
  9. 什么是好的数据指标:精益数据分析
  10. 为什么说 Python 内置函数并不是万能的?