提醒一下 RecyclerView 安卓自带的当中是没有的,所以需要导入包的。

 

android.support.v4.widget.SwipeRefreshLayout 中的v7,v4都已经变成 androidx了。希望大家注意

android 由于升级 所以build.gradle中是添加,

 implementation 'androidx.recyclerview:recyclerview:1.0.0' implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.0.0'

如果版本较低的话,添加 

implementation 'com.android.support:recyclerview-v7:28.0.0'

项目结构 ,写的比较复杂,没有嵌套 需求,本文章就不要看了。

android 中RecyclerView 嵌套了 GridView 的用法_第1张图片

五个布局文件

activity_buttom.xml

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

activity_grid.xml

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

activity_griditem.xml

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

activity_main.xml

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

activity_topitem.xml

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

 创建实体类 Taobao

package com.example.myapplication.pojo;public class Taobao {    private String name;    private String information;    @Override    public String toString() {        return "Taobao{" +                "name='" + name + '\'' +                ", information='" + information + '\'' +                '}';    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getInformation() {        return information;    }    public void setInformation(String information) {        this.information = information;    }}

 

创建gridview适配器

package com.example.myapplication.MyAdapter;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.TextView;import com.example.myapplication.R;import com.example.myapplication.pojo.Taobao;import java.util.List;//自定义带有GridLayOut布局的public class GridViewAdapter extends BaseAdapter {    private List taobaoList;    private LayoutInflater inflater;    public GridViewAdapter() {    }    public GridViewAdapter(List stuList, Context context) {        this.taobaoList = stuList;        this.inflater=LayoutInflater.from(context);    }    @Override    public int getCount() {        return taobaoList ==null?0: taobaoList.size();    }    @Override    public Taobao getItem(int position) {        return taobaoList.get(position);    }    @Override    public long getItemId(int position) {        return position;    }    @Override    public View getView(int position, View convertView, ViewGroup parent) {        //加载布局为一个视图        final View view=inflater.inflate(R.layout.activity_griditem,null);        ViewHolder viewHolder=new ViewHolder();         Taobao taobao=getItem(position);        viewHolder.t1=view.findViewById(R.id.t1);        viewHolder.t1.setText(taobao.getName());        viewHolder.t2=view.findViewById(R.id.t2);        viewHolder.t2.setText(taobao.getInformation());        return view;    }    class ViewHolder{        TextView t1;        TextView t2;    }}

 创建recycleview 适配器(里面有viewHolder)

package com.example.myapplication.MyAdapter;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.GridView;import android.widget.TextView;import androidx.annotation.NonNull;import androidx.recyclerview.widget.RecyclerView;import com.example.myapplication.R;import com.example.myapplication.pojo.Taobao;import java.util.List;public class RecyclerViewAdapter extends RecyclerView.Adapter {    List list;    //数据集合    Context context;    String path1;    String path2;    private LayoutInflater layoutInflater;    public RecyclerViewAdapter(List list, Context context,String path1,String path2){        this.list=list ;       this.path1=path1;       this.path2=path2;        this.context = context;    }//    这个方法是用来处理onCreateViewHolder方法中的viewtype 的    @Override    public int getItemViewType(int position) {        System.out.println("getItemViewType  "+position);        return position;    }//    初始化item布局    @NonNull    @Override    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {        RecyclerView.ViewHolder viewHolder=null;        System.out.println("这里的 viewtype "+viewType);        if(viewType==0){            View view= LayoutInflater.from(context).inflate(R.layout.activity_topitem,parent,false);            view.getLayoutParams().height=170;            viewHolder=new TopHolder(view);        }        if(viewType==1){            View view= LayoutInflater.from(context).inflate(R.layout.activity_grid,parent,false);            viewHolder=new GridViewHolder(view);        }        if(viewType==2){            View view= LayoutInflater.from(context).inflate(R.layout.activity_buttom,parent,false);            view.getLayoutParams().height=100;            viewHolder=new ButtomHolder(view);        }        return viewHolder;    }//    处理每一个item 的地方,绑定数据    @Override    public void onBindViewHolder( RecyclerView.ViewHolder holder, int position) {        System.out.println("onBindViewHolder" +position);        if(position==0){            System.out.println("yongl ");            TopHolder topHolder=(TopHolder)holder;        }        if( position==1){            System.out.println("yong2 ");           GridViewHolder gridViewHolder=(GridViewHolder)holder;           gridViewHolder.gridView.setAdapter(gridViewHolder.gridViewAdapter);        }        if( position==2){            System.out.println("yong3 ");            ButtomHolder buttomHolder=(ButtomHolder)holder;            buttomHolder.t1.setText(path1);            buttomHolder.t2.setText(path2);        }    }//    显示数量,因为我的布局文件就是三个,所以我返回san     @Override    public int getItemCount() {        return 3;    }    public class GridViewHolder extends RecyclerView.ViewHolder{        public GridView gridView;        public GridViewAdapter gridViewAdapter;        public GridViewHolder(@NonNull View itemView) {            super(itemView);            gridView=itemView.findViewById(R.id.g1);            gridViewAdapter=new GridViewAdapter(list,context);        }    }    public class ButtomHolder extends RecyclerView.ViewHolder {        public TextView t1;        public TextView t2;        public ButtomHolder(@NonNull View itemView) {            super(itemView);            t1=itemView.findViewById(R.id.t1);            t2=itemView.findViewById(R.id.t2);        }    }    public class TopHolder extends RecyclerView.ViewHolder {        public TopHolder(@NonNull View itemView) {            super(itemView);        }    }}

最后是mainactivity

package com.example.myapplication;import androidx.annotation.NonNull;import androidx.appcompat.app.AppCompatActivity;import androidx.recyclerview.widget.GridLayoutManager;import androidx.recyclerview.widget.LinearLayoutManager;import androidx.recyclerview.widget.RecyclerView;import androidx.recyclerview.widget.RecyclerView.OnScrollListener;import android.graphics.Rect;import android.os.Bundle;import android.view.View;import android.widget.Toast;import com.example.myapplication.MyAdapter.RecyclerViewAdapter;import com.example.myapplication.pojo.Taobao;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity {//    上面是 gridview 适配器    private List taobaoList;    private RecyclerViewAdapter recyclerViewAdapter;    private RecyclerView recyclerView;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initdata();        recyclerView = findViewById(R.id.news_list);        recyclerViewAdapter = new RecyclerViewAdapter(taobaoList, MainActivity.this, "num1", "num2");        recyclerView.setLayoutManager(new GridLayoutManager(this, 1));////      下面配置RecyclerView 布局//        recyclerViewAdapter = new RecyclerViewAdapter(taobaoList, MainActivity.this);        recyclerView.setAdapter(recyclerViewAdapter);        recyclerView.addOnScrollListener(new OnScrollListener() {            @Override            public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {                super.onScrollStateChanged(recyclerView, newState);                Toast.makeText(MainActivity.this, "下拉刷新", Toast.LENGTH_SHORT).show();            }            @Override            public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {                super.onScrolled(recyclerView, dx, dy);                Toast.makeText(MainActivity.this, "下拉刷新OnScrolled", Toast.LENGTH_SHORT).show();            }        });    }    public void initdata() {        taobaoList = new ArrayList<>();        String[] taobao_name = new String[]{                "蓝月亮洗衣液组合", "南方黑芝麻糊360*3袋", "鞋刷软毛刷鞋刷子不伤血", "ANN骑士靴女高筒2019秋冬平底鞋",                "凌平铺子-坚果大礼包", "黑麦片高纤维低脂", "君乐宝酸奶健存", "新品【三只松鼠】750g"        };        String[] taobao_price = new String[]{                "¥22.2", "¥332", "¥213", "¥99.9", "¥19.9", "¥234", "¥222", "¥999", "¥888"        };        for (int i = 0; i < 8; i++) {            Taobao stu = new Taobao();            stu.setName(taobao_name[i]);            stu.setInformation(taobao_price[i]);            taobaoList.add(stu);        }    }}

 

更多相关文章

  1. Android之LinearLayout(线性布局)
  2. Android 布局加载源代码分析
  3. Android UI布局
  4. android 常见布局及控件的属性详解
  5. Android布局动画之animateLayoutChanges与LayoutTransition
  6. Android布局详解
  7. Android一些关于分辨率和布局的设置

随机推荐

  1. android 启动图
  2. Android基于Window.ID_ANDROID_CONTENT给
  3. 在Android(安卓)Studio 中导入opencv2.4.
  4. Beginning Android(安卓)Debug
  5. android 使用include 调用内部组件
  6. android > 设置button 背景颜色
  7. 使用RenderScript库,在某些手机或Android
  8. linux android V4l2 的一些精品文章连接
  9. Android实现服务器登录
  10. [转]Android(安卓)Market 链接的生成与分享