RecyclerView基础写法简单实现

转帖请注明本文出自weimeig的博客(https://blog.csdn.net/weimeig/article/details/80244059),请尊重他人的辛勤劳动成果,谢谢

一、添加依赖

dependencies {
    compile 'com.android.support:recyclerview-v7:23.1.1'
  }

点击右上角Sync Now,此时如果不报红,直接跳过下面步骤,可以开始编写RecyclerView控件了。

但,如果点击了右上角的Sync Now,却还是出现报红不用怕

修改后

点击右上角Sync Now


二、定义本地数据源Menu类,为RecyclerView提供数据源。

Menu.java
package com.administrator.taolvyou.entity;

/**
 * 数据源
 * Created by Administrator on 2018/5/8.
 */

public class Menu {
    public int icon;
    public String menuName;

    public Menu(int icon, String menuName) {
        this.icon = icon;
        this.menuName = menuName;
    }
}

三、定义DataUtil工具类,将数据源转换成集合形式存储并返回该集合对象。

DataUtil.java

package com.administrator.taolvyou.util;


import com.administrator.taolvyou.entity.Menu;

import java.util.ArrayList;
import java.util.List;

/**
 * 数据源
 * Created by Administrator on 2018/5/8.
 */
public class DataUtil {

        /**
        *  主菜单
        * @param icons
        * @param names
        * @return
        */
        public static List<Menu> getMainMenus(int icons[],String names[]){//导包导入我们刚才建立的实体类的包
            List<Menu> menus = new ArrayList<>();
            for(int i=0;i<icons.length;i++){
                Menu menu = new Menu(icons[i],names[i]);
                menus.add(menu);
            }
            return menus;
        }
}

四、在strings文件中定义数组数据

<resources>
    <string name="app_name">TaoLvYou</string>
    <string-array name="main_menu">
        <item>飞机票</item>
        <item>住酒店</item>
        <item>去旅游</item>
        <item>周边游</item>
        <item>买门票</item>
        <item>火车票</item>
        <item>汽车票</item>
        <item>领里程</item>
    </string-array>
</resources>

五、在fragment_main中引入该RecyelerView控件

fragment.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
            <android.support.v7.widget.RecyclerView
                android:id="@+id/recycleview_main_menu"
                android:layout_width="match_parent"
                android:layout_height="wrap_content">
            </android.support.v7.widget.RecyclerView>
</RelativeLayout>

六、为数据与视图之间定义适配器MainMenuAdapter

MainMenuAdapter.java

package com.administrator.taolvyou.adapter;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.administrator.taolvyou.R;
import com.administrator.taolvyou.entity.Menu;

import java.util.List;

/**
 * Created by Administrator on 2018/5/8.
 */

public class MainMenuAdapter extends RecyclerView.Adapter<MainMenuAdapter.MainMenuViewHolder> {
    protected Context context;
    protected List<Menu> menus;

    class MainMenuViewHolder extends RecyclerView.ViewHolder{
        public ImageView mImgMenuIcon;
        public TextView mTxtMenuName;
        public MainMenuViewHolder(View itemView) {
            super(itemView);
            mImgMenuIcon=(ImageView) itemView.findViewById(R.id.img_menu_icon);
            mTxtMenuName=(TextView) itemView.findViewById(R.id.txt_menu_name);

        }
    }
    public MainMenuAdapter(Context context, List<Menu> menus){
        this.context=context;
        this.menus=menus;
    }
    @Override
    public MainMenuViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        return new MainMenuViewHolder(LayoutInflater.from(context).inflate(R.layout.item_main_menu,null));//将布局渲染成一个视图的形式
    }

    @Override
    public void onBindViewHolder(MainMenuViewHolder holder, int position) {
        Menu menu=menus.get(position);//返还每一个菜单的对象
        holder.mImgMenuIcon.setImageResource(menu.icon);
        holder.mTxtMenuName.setText(menu.menuName);
    }

    @Override
    public int getItemCount() {
        return null!=menus?menus.size():0;
    }
}

七、在主界面视图中使用该布局

MainFragment.java

package com.administrator.taolvyou.fragment;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.administrator.taolvyou.R;
import com.administrator.taolvyou.adapter.MainMenuAdapter;
import com.administrator.taolvyou.util.DataUtil;

/**
 * 主界面视图
 */
public class MainFragment extends Fragment{

    protected RecyclerView mRecyclerViewMenu;
    //菜单图标
    protected  int [] menuIons={R.mipmap.menu_airport,R.mipmap.menu_car
            ,R.mipmap.menu_course,R.mipmap.menu_hatol,
            R.mipmap.menu_nearby, R.mipmap.menu_ticket,
            R.mipmap.menu_train,R.mipmap.menu_trav};
    String[] menus;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_main,container,false);
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        menus=this.getActivity().getResources().getStringArray(R.array.main_menu);//从string文件中,将数组数据拿出来
        mRecyclerViewMenu = (RecyclerView) getView().findViewById(R.id.recycleview_main_menu);
        //设置RecyclerView布局的样式
        mRecyclerViewMenu.setLayoutManager(new GridLayoutManager(getActivity(),4));//第一个参数是context对象,第二个参数是列数
        //另有线性布局写法可另行百度
         //菜单
        MainMenuAdapter mainMenuAdapter = new MainMenuAdapter(getActivity(), DataUtil.getMainMenus(menuIons,menus));
        mRecyclerViewMenu.setAdapter(mainMenuAdapter);
    }
}

运行效果:


项目Demo下载:

https://download.csdn.net/download/weimeig/10401154



猜你喜欢

转载自blog.csdn.net/weimeig/article/details/80244059