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;
}

@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 {
    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包 才能用这个组件

布局代码



安卓最烦的就是要下载好多文件,但是由于共党的高墙,实在是牛逼
好多时候 都需要手动配置

最近一周在汇森  一直以为这的公司都很牛逼 进去之后才发现 妈的 连中国电信的那种傻逼部门都进来了
好多傻逼 天天在这看电影 打游戏 操他妈 还他吗打电话 嫩求大声     明天搬回去
浪费学校领导的一片苦心 这么好的网速 这么好的环境 就被这群煞笔糟蹋了

你可能感兴趣的:(android)