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<RecyclerView.ViewHolder> {
private List<String> 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;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
mParam1 = getArguments().getString(ARG_PARAM1);
mParam2 = getArguments().getString(ARG_PARAM2);
}
}
@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;
}
// TODO: Rename method, update argument and hook method into UI event
public void onButtonPressed(Uri uri) {
if (mListener != null) {
mListener.onFragmentInteraction(uri);
}
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
if (context instanceof OnFragmentInteractionListener) {
mListener = (OnFragmentInteractionListener) context;
} else {
throw new RuntimeException(context.toString()
+ " must implement OnFragmentInteractionListener");
}
}
@Override
public void onDetach() {
super.onDetach();
mListener = null;
}
public interface OnFragmentInteractionListener {
// TODO: Update argument type and name
void onFragmentInteraction(Uri uri);
}
class mainAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private List<String> 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"?>
<TextView
android:gravity="center"
android:id="@+id/main_two_text"
android:text="这是第二个布局"
android:layout_width="wrap_content"
android:layout_height="40dp" />
安卓最烦的就是要下载好多文件,但是由于共党的高墙,实在是牛逼
好多时候 都需要手动配置
最近一周在汇森 一直以为这的公司都很牛逼 进去之后才发现 妈的 连中国电信的那种傻逼部门都进来了
好多傻逼 天天在这看电影 打游戏 操他妈 还他吗打电话 嫩求大声 明天搬回去
浪费学校领导的一片苦心 这么好的网速 这么好的环境 就被这群煞笔糟蹋了