Android使用recycleView组件
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"?>
安卓最烦的就是要下载好多文件,但是由于共党的高墙,实在是牛逼好多时候 都需要手动配置最近一周在汇森 一直以为这的公司都很牛逼 进去之后才发现 妈的 连中国电信的那种傻逼部门都进来了好多傻逼 天天在这看电影 打游戏 操他妈 还他吗打电话 嫩求大声 明天搬回去浪费学校领导的一片苦心 这么好的网速 这么好的环境 就被这群煞笔糟蹋了
更多相关文章
- “罗永浩抖音首秀”销售数据的可视化大屏是怎么做出来的呢?
- Nginx系列教程(三)| 一文带你读懂Nginx的负载均衡
- 不吹不黑!GitHub 上帮助人们学习编码的 12 个资源,错过血亏...
- Android中的4.0新布局控件:Space和GridLayout
- Android中HttpURLConnection使用详解
- Android定位入门(1)了解定位管理器--LocationManager 类
- android保存联系人到通讯录
- Android中的ListView内容刷新问题
- Android(安卓)使用Intent传递数据的实现思路与代码