1. 程式人生 > >RecyclerView基礎寫法簡單實現

RecyclerView基礎寫法簡單實現

一、新增依賴

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下載:



相關推薦

RecyclerView基礎寫法簡單實現

一、新增依賴dependencies { compile 'com.android.support:recyclerview-v7:23.1.1' }點選右上角Sync Now,此時如果不報紅,直接跳過下面步驟,可以開始編寫RecyclerView控制元件了。但,

Linux C/C++網路程式設計基礎 TCP簡單實現

簡單的linux下socket程式設計,分別基於TCP協議實現的簡單程式linux下socket程式設計可以概括為以下幾個函式的運用:socket()bind()listen()connect()accept()read()write()close()函式server端/*

Android Recyclerview粘性頭部 簡單實現

引言 最近好久沒寫程式碼了,都是一直在維護之前的專案,由於工作的需要,學習重心最近放在了Js的學習上。以至於,我有個需求要寫個Recyclerview列表,我竟然一下子忘記怎麼寫了,我只能去網上搜索相關的使用方法,後來才覺得寫筆記的重要性,一方面自己看自己寫的

Java lambda寫法簡單實現

       眾所周知,java8支援lambda表示式,常見的一些操作都可以通過lamb

javaSE基礎之 LinkedList的底層簡單實現

http 簡單測試 void nis () gen png mage pre 這裏貼上LinkedList底層的簡單實現 package com.yck.mylinkedlist; public class Node { private Node prev

Struts2基礎-1- 簡單java類實現Action控制器

tex rep 初始 font 實例 fig 一個 返回結果 action Strut2中,Action可以不繼承任何特殊的類或不實現任何特殊的接口,可以只編寫一個普通的Java類作為Action類,只要該類含有一個返回字符串的無參的public方法即可!實際開發中,通常繼

安卓音、視頻播放功能簡單實現 --Android基礎

ket undle 顯示 perm err efault 繼續 bre mpat 1、音樂播放功能 關鍵代碼: MainActivity.java: package thonlon.example.cn.musicdemowithoutservice;import

深度學習理論基礎4-簡單邏輯電路的感知機實現

  接下來我們小試牛刀,為感知機設定權重及閥值,實現一些簡單的邏輯電路。 ----------------------------------------------------與門--------------------------------------------------

Recyclerview最最簡單實現水平分頁GridView效果

前言 昨天UI妹子給了給需求,展示水平分頁效果,而且第二頁要預設顯示一部分,提示使用者水平可以滑動,先上效果圖: 很明顯橫向滑動的分頁,第一反應就是使用ViewPager,畢竟只要通過自定義ViewPager,實現這個效果還是很容易,但是實際中問題時,當

Tablayout+Viewpager+recyclerview簡單實現

//小菜鳥奮鬥中 package com.tablayoutviewpagerrecyclerview.tablayoutviewpagerrecyclerview; import android.os.Bundle; import android.support.des

C#基礎系列——委託實現簡單設計模式

前言:上一篇介紹了下多執行緒的相關知識:C#基礎系列——多執行緒的常見用法詳解,裡面就提到了委託變數。這篇簡單介紹下委託的使用。當然啦,園子裡面很多介紹委託的文章都會說道:委託和事件的概念就像一道坎,過了這個檻的人,覺得真是太容易了,而沒有過去的人每次見到委託和事件就覺得心裡發慌。確實這東西就像最開始學C語言

Android零基礎入門第71節:CardView簡單實現卡片式佈局

   還記得我們一共學過了多少UI控制元件了嗎?都掌握的怎麼樣啊。     安卓中一些常用控制元件學習得差不多了,今天再來學習一個新的控制元件CardView,在實際開發中也有非常高的地位。 一、CardView簡介     CardView是Androi

MVP簡單實現OKHttp+recyclerview+springview

需要新增的依賴 compile 'com.android.support:recyclerview-v7:25.3.1' compile 'com.liaoinstan.springview:library:1.2.6' compile 'com.squareup.okht

salesforce零基礎學習(九十三)Email To Case的簡單實現

.html 比較 html isn email fir 針對 verify except Salesforce提供了標準的功能來實現通過Email 創建 Case。我們可以設置指定的路由的地址,指定條件的郵件會自動生成到目標salesforce系統的Case數據。Sales

Mycat1.6基礎用法之--簡單實現mysql高可用

cat /app/mycat/conf/server.xml <user name="root" defaultAccou

網頁內容解析簡單實現

return end pro spa del crawl 測試 節點 nod 概述   在日常開發工作中,有時候我們需要去一些網站上抓取數據,要想抓取數據,就必須先了解網頁結構,根據具體的網頁結構,編寫對應的程序對數據進行采集。最近剛好有一個需求,需要更新收貨地址

侵入式單鏈表的簡單實現

== uri new cast amp typedef all 內存地址 類型 通常情況下,單鏈表的定義是這樣子滴, typedef struct foo_s { int data; struct foo_s

侵入式單鏈表的簡單實現(cont)

con ima -o error alt set clas eric int 前一節介紹的侵入式鏈表的實現的封裝性做得不好,因為會讓消費者foo.c直接使用宏container_of()。這一節對list的定義做了一下改進,如下所示: typedef struct lis

A*算法的理解與簡單實現

update for port 移動 ont 效率 print 估算 net 基本定義 一種尋路算法,特點是:啟發式的,效率高,基本思路比較簡單。 用途 尋路。在指定的地圖上,考慮到地圖上的移動代價,找到最優的路徑。 核心概念 開表,閉表,估值函數。 開表 開表,記錄了當前

python基礎一 ------簡單隊列用作歷史記錄

但是 猜字遊戲 history 無限制 tor except exc rom [] #需求:測試歷史記錄,一個猜字遊戲,能在重新進入遊戲時查看輸入歷史# 1 #-*-coding:utf-8-*- 2 from random import randint 3 fro