1. 程式人生 > >Android開發中如何使用RecyclerView

Android開發中如何使用RecyclerView

ins 初始化 find count target otto 例子 並且 詳細信息

介紹 在Android應用程序中,只要您想顯示數據列表,就可以使用 RecyclerView 。 早期的Android提供 ListView 了同樣的東西。 RecyclerView 可以被認為是一個更高級和性能優化的版本 ListView 。 顧名思義, RecyclerView 也可以使用 ViewHolder 模式 回收物

介紹

在Android應用程序中,只要您想顯示數據列表,就可以使用RecyclerView早期的Android提供ListView了同樣的東西。RecyclerView可以被認為是一個更高級和性能優化的版本ListView顧名思義,RecyclerView也可以使用

ViewHolder模式回收物品除此之外,它還使用了一個LayoutManager更靈活的方法來創建水平,垂直甚至交錯的列表。它還提供垂直和水平滾動以及項目動畫。雖然ListView也可以修改為使用‘ ViewHolder‘模式,RecyclerView強制使用相同的模式。它甚至可以處理大量數據,同時提供響應式界面。

在這篇文章中,我們將看到如何RecyclerView使用Android Studio在Android應用程序中實現一個簡單的。我將使用Android studio版本。

創建一個新項目

  1. 打開Android Studio。轉到文件 - >“新建項目”
    ,填寫應用程序名稱和其他詳細信息,選擇API版本為API 15選擇清空活動,在下一個屏幕中保留默認選項,然後單擊完成。將創建新項目以及所需文件。(在示例中,我將應用程序名稱指定為“ SimpleRecyclerViewExample”並將包裝為“ com.example
  2. 要使用RecyclerView,我們需要添加recycleler視圖依賴項。打開build.gradle(Module:app)文件,並com.android.support:recyclerview-v7:26.1.0在dependencies部分添加以下“implementation‘
    ‘”。單擊立即同步以同步更改並構建項目。
  3. 在布局文件夾中打開activity_main.xml並添加Recycler View小部件。更改後,XML文件應如下所示:
隱藏 復制代碼
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:app="http://schemas.android.com/apk/res-auto"

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    tools:context="com.example.simplerecyclerviewexample.MainActivity">

<android.support.v7.widget.RecyclerView

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:id="@+id/rvFootballTeamInfo"

    android:scrollbars="vertical"

    ></android.support.v7.widget.RecyclerView>

</android.support.constraint.ConstraintLayout>

對於Recycler視圖,我們提供了一個id並指定了滾動條是垂直的。

創建模型類和布局文件

  1. 我們將在Recycler視圖中顯示足球隊相關信息我們將創建一個用於存儲信息的模型類。創建一個類FootballTeam.java和創建變量NameLeagueYearEstablished 隱藏 收縮 技術分享圖片 復制代碼
    package com.example.simplerecyclerviewexample;
    
    public class FootballTeam {
    
        private String name;
        private String league;
        private int yearEstablished;
    
        public FootballTeam() {
    
        }
    
        public FootballTeam(String name, String league, int yearEstablished) {
            this.name = name;
            this.league = league;
            this.yearEstablished = yearEstablished;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getLeague() {
            return league;
        }
    
        public void setLeague(String league) {
            this.league = league;
        }
    
        public int getYearEstablished() {
            return yearEstablished;
        }
    
        public void setYearEstablished(int yearEstablished) {
            this.yearEstablished = yearEstablished;
        }
    }
  2. 創建一個名為row.xml的布局文件此布局將用於在回收站視圖中顯示每條記錄。我們將創建一個RelativeLayout包含三個文本視圖的簡單視圖,用於顯示已建立的名稱,聯盟和年份。布局的完整XML如下所示: 隱藏 收縮 技術分享圖片 復制代碼
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout
    
        xmlns:android="http://schemas.android.com/apk/res/android"
    
        xmlns:tools="http://schemas.android.com/tools"
    
        android:layout_width="match_parent"
    
        android:layout_height="wrap_content"
    
        android:paddingBottom="16dp"
    
        android:paddingLeft="16dp"
    
        android:paddingRight="16dp"
    
        android:paddingTop="16dp" >
        
        <TextView
    
            android:id="@+id/tvName"
    
            android:layout_width="match_parent"
    
            android:layout_height="wrap_content"
    
            android:layout_alignParentTop="true"
    
            tools:text="Team Name"
    
            android:textSize="20dp"
    
            android:textStyle="bold" />
    
        <TextView
    
            android:id="@+id/tvLeague"
    
            android:layout_width="match_parent"
    
            android:layout_height="wrap_content"
    
            tools:text="Team League"
    
            android:layout_below="@id/tvName" />
    
        <TextView
    
            android:id="@+id/tvYear"
    
            android:layout_width="wrap_content"
    
            android:layout_height="wrap_content"
    
            tools:text="1999"
    
            android:layout_alignParentRight="true"
    
             />
    
    </RelativeLayout>

對於這個例子,我直接對填充和textSizeXML進行了硬編碼,但在單獨的XML文件中使用它是一個好主意。我使用了“ tools:Text”屬性來了解我的布局在設計器中的外觀。運行應用程序時不會呈現相同的內容。

創建適配器

現在我們已經創建了Model項目布局,現在是時候創建我們的adapter類了。adapter班是負責創建ViewHolder對象和數據綁定到他們。

  1. 創建一個名為MyAdapter.java的類,並輸入以下代碼: 隱藏 收縮 技術分享圖片 復制代碼
    package com.example.simplerecyclerviewexample;
    
    import android.support.v7.widget.RecyclerView;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.LinearLayout;
    import android.widget.TextView;
    
    import java.util.List;
    
    public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
    
        public List<FootballTeam> teamList;
    
        public MyAdapter(List<FootballTeam> footballTeamList) {
            teamList = footballTeamList;
        }
    
        public class ViewHolder extends RecyclerView.ViewHolder {
    
            TextView name, league, yearEstablished;
    
            public ViewHolder(View itemView) {
                super(itemView);
                name = (TextView) itemView.findViewById(R.id.tvName);
                league = (TextView) itemView.findViewById(R.id.tvLeague);
                yearEstablished = (TextView) itemView.findViewById(R.id.tvYear);
            }
        }
    
        public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.row,parent, false);
    
            return new ViewHolder(view);
        }
    
        @Override
        public void onBindViewHolder(MyAdapter.ViewHolder holder, int position) {
            holder.name.setText(teamList.get(position).getName());
            holder.league.setText(teamList.get(position).getLeague());
            holder.yearEstablished.setText(String.valueOf
                                          (teamList.get(position).getYearEstablished()));
        }
    
        @Override
        public int getItemCount() {
            return teamList.size();
        }
    }

我們的Adapter類擴展了RecyclerView.Adapter類並管理所有ViewHolder對象。我們ViewHolder在適配器中定義了類,並TextViewViewHolder構造函數中初始化了s

適配器負責ViewHolder根據需要創建對象。viewHolder當用戶滾動列表項時,它還創建了新的對象。我們需要覆蓋三種重要的方法。

onCreateViewHolder()”方法用於創建ViewHolder,我們正在膨脹我們之前在其中創建的布局。

onBindViewHolder()”方法用於將數據綁定到ViewHolder它根據列表位置確定需要顯示的數據並填充ViewHolder

getItemCount()”方法返回的大小dataset在我們的例子中,這將是該項目中的項目數量teamList

我們還創建了一個構造函數,我們將使用它來分配teamList我們將通過我們集合Mainactivity現在我們已經創建了適配器,現在是將所有內容綁定在一起的時候了。

主要活動變化

  1. 打開MainActivity.java並進行如下所示的更改: 隱藏 收縮 技術分享圖片 復制代碼
    package com.example.simplerecyclerviewexample;
    
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.support.v7.widget.LinearLayoutManager;
    import android.support.v7.widget.RecyclerView;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class MainActivity extends AppCompatActivity {
        RecyclerView rvTeams;
        List<FootballTeam> teamList = new ArrayList<>();
        MyAdapter adapter;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            rvTeams = (RecyclerView) findViewById(R.id.rvFootballTeamInfo);
    
            setTeamData();
    
            adapter = new MyAdapter(teamList);
            RecyclerView.LayoutManager manager = new LinearLayoutManager(getApplicationContext());
            rvTeams.setLayoutManager(manager);
            rvTeams.setAdapter(adapter);
        }
    
        private void setTeamData() {
            FootballTeam team = new FootballTeam("Manchester United", "English Premier League", 1878);
            teamList.add(team);
    
            team = new FootballTeam("Arsenal", "English Premier League", 1886);
            teamList.add(team);
    
            team = new FootballTeam("Liverpool", "English Premier League", 1892);
            teamList.add(team);
    
            team = new FootballTeam("Juventus", "Serie A", 1897);
            teamList.add(team);
    
            team = new FootballTeam("Real Madrid", "La Liga", 1902);
            teamList.add(team);
    
            team = new FootballTeam("Bayern Munich", "Bundesliga", 1900);
            teamList.add(team);
    
            team = new FootballTeam("PSG", "France Ligue 1", 1970);
            teamList.add(team);
    
            team = new FootballTeam("Ajax", "Eredivisie", 1900);
            teamList.add(team);
        }
    }

MainActivity.java文件中,我們創建了對Recycler視圖的引用,並且我們還為Adapter和list創建了變量。我們已經使用該setTeamData()方法來填充我們ArrayList將要顯示的數據RecyclerView

在“ onCreate()”方法中,我們正在創建一個LinearLayoutManager並為我們分配相同的方法RecyclerViewLayoutManager所使用的再循環器,以便在屏幕上每個單獨的物品位置。我們習慣於LinearLayoutManager水平放置物品。其他類型的選項包括GridLayoutManagerStaggeredGridLayoutManager如果需要,我們還可以創建自定義布局管理器。

設置布局管理器後,我們將自定義適配器分配給recycler視圖。在運行應用程序時,您將看到List如下圖所示的項目列表您還可以滾動列表。RecyclerView還提供了指定動畫的不同選項,或者onclick如果希望列表中的項目可單擊並且您希望對列表項單擊執行某些操作,則可以實現偵聽器。

技術分享圖片

Android開發中如何使用RecyclerView