Android 使用RecycleView列表實(shí)現(xiàn)加載更多的示例代碼
1.界面布局
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#f0f3f5"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:src="@mipmap/logo"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center">
<TextView
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:gravity="center"
android:text="電影名"/>
<LinearLayout
android:layout_width="0dp"
android:layout_weight="1"
android:gravity="center"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:text="電影評分" />
</LinearLayout>
<TextView
android:layout_width="0dp"
android:layout_weight="1"
android:gravity="center"
android:layout_height="wrap_content"
android:text="電影圖片"/>
</LinearLayout>
</LinearLayout>
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:id="@+id/s1">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/r1"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
</LinearLayout>
</FrameLayout>
列表布局list.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="160dp">
<TextView
android:id="@+id/t2"
android:layout_width="0dp"
android:layout_weight="1.5"
android:gravity="center"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="我不是藥神"/>
<TextView
android:id="@+id/t3"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:text="9.0"/>
<ImageView
android:id="@+id/i1"
android:layout_width="0dp"
android:layout_weight="1.5"
android:layout_height="150dp"
android:padding="20dp"
android:src="@mipmap/ic_launcher"/>
</LinearLayout>
加載更多布局foot_view.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/tv_foot"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp"
android:gravity="center"
tools:text="下拉刷新"
android:orientation="vertical"/>

2.功能實(shí)現(xiàn)
(1)添加網(wǎng)絡(luò)權(quán)限
<uses-permission android:name="android.permission.INTERNET"/>
(2)添加使用到的第三方庫
implementation 'com.android.support:design:28.0.0'
implementation 'com.android.support:support-v4:28.0.0'
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.squareup.okhttp3:okhttp:3.12.1'
debugImplementation 'com.squareup.okhttp3:logging-interceptor:3.12.1'
implementation 'com.google.code.gson:gson:2.8.5'
implementation 'com.github.bumptech.glide:glide:4.9.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0'
(3)數(shù)據(jù)解析
使用GsonFormat插件,快速將json字符串轉(zhuǎn)換成一個Java Bean,免去我們根據(jù)json字符串手寫對應(yīng)Java Bean的過程。
定義一個類OneModel.class
public class OneModel implements Serializable {
}
使用快捷鍵(Alt+s)粘貼全部過去數(shù)據(jù),之后一直點(diǎn)擊OK

(4)綁定控件ID
private RecyclerView r1; private SwipeRefreshLayout s1; private LinearLayoutManager linearLayoutManager; private Adapter adapter;

(5)定義一個Adapter類
package com.example.note4;
import android.content.Context;
import android.graphics.Color;
import android.os.Handler;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
import java.util.List;
public class Adapter extends RecyclerView.Adapter<Adapter.ViewHolder> {
private Context mContext;
private List<DateModel.SubjectsBean> mData;//數(shù)據(jù)
private int max_count = 6;//最大顯示數(shù)
private Boolean isFootView = false;//是否添加了FootView
private String footViewText = "";//FootView的內(nèi)容
//兩個final int類型表示ViewType的兩種類型
private final int NORMAL_TYPE = 0;
private final int FOOT_TYPE = 1111;
public Adapter(Context context, List<DateModel.SubjectsBean> data) {
this.mContext = context;
this.mData = data;
}
public class ViewHolder extends RecyclerView.ViewHolder {
public TextView t3,t2;
public ImageView i1;
private TextView tvFootView;
//初始化viewHolder,此處綁定后在onBindViewHolder中可以直接使用
public ViewHolder(View itemView, int viewType) {
super(itemView);
if (viewType == NORMAL_TYPE) {
t3 = (TextView) itemView.findViewById(R.id.t3);
t2 = (TextView) itemView.findViewById(R.id.t2);
i1=(ImageView)itemView.findViewById(R.id.i1);
} else if (viewType == FOOT_TYPE) {
tvFootView = (TextView) itemView.findViewById(R.id.tv_foot);
}
}
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View normal_views = LayoutInflater.from(parent.getContext()).inflate(
R.layout.list, parent, false);
View foot_view = LayoutInflater.from(parent.getContext()).inflate(
R.layout.foot_view, parent, false);
if (viewType == FOOT_TYPE)
return new ViewHolder(foot_view, FOOT_TYPE);
return new ViewHolder(normal_views, NORMAL_TYPE);
}
@Override
public int getItemViewType(int position) {
if (position == max_count - 1) {
return FOOT_TYPE;
}
return NORMAL_TYPE;
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
DateModel.SubjectsBean subjectsBean=mData.get(position);
//如果footview存在,并且當(dāng)前位置ViewType是FOOT_TYPE
if (isFootView && (getItemViewType(position) == FOOT_TYPE)) {
holder.tvFootView.setText(footViewText);
// 刷新太快 所以使用Hanlder延遲兩秒
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
max_count += 5;
notifyDataSetChanged();
}
}, 1000);
} else {
holder.t2.setText(subjectsBean.getTitle());
holder.t3.setText(subjectsBean.getRate());
Glide.with(mContext).load(subjectsBean.getCover()).into(holder.i1);
}
}
@Override
public int getItemCount() {
if (mData.size() <= max_count) {
return mData.size();
}
return max_count;
}
//創(chuàng)建一個方法來設(shè)置footView中的文字
public void setFootViewText(String footViewText) {
isFootView = true;
this.footViewText = footViewText;
}
}
(6)網(wǎng)絡(luò)請求
public void getDate(DateModel dateModel)
{
if(dateModel==null||dateModel.getSubjects()==null)
{
Toast.makeText(MainActivity.this,"失敗",Toast.LENGTH_SHORT).show();
return;
}
Toast.makeText(MainActivity.this,"成功",Toast.LENGTH_SHORT).show();
adapter=new Adapter(MainActivity.this,dateModel.getSubjects());
adapter.setFootViewText("加載中...");
r1.setAdapter(adapter);
s1.setRefreshing(false);
}
public void requestDate() {
String url = "https://movie.douban.com/j/search_subjects?type=movie&tag=%E8%B1%86%E7%93%A3%E9%AB%98%E5%88%86&sort=recommend&page_limit=200&page_start=0";
OkHttpClient okHttpClient = new OkHttpClient();
final Request request = new Request.Builder()
.url(url)
.get()
.build();
Call call = okHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this, "網(wǎng)絡(luò)連接失敗", Toast.LENGTH_SHORT).show();
}
});
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String result = response.body().string();
Gson gson = new Gson();
final DateModel dateModel = gson.fromJson(result, DateModel.class);
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this, "網(wǎng)絡(luò)連接成功", Toast.LENGTH_SHORT).show();
getDate(dateModel);
}
});
}
});
}
(7)功能實(shí)現(xiàn)

linearLayoutManager=new LinearLayoutManager(MainActivity.this);
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
r1.setLayoutManager(linearLayoutManager);
requestDate();
s1.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
requestDate();
}
},1000);
}
});
(8)源代碼
點(diǎn)擊下載
到此這篇關(guān)于Android 使用RecycleView列表實(shí)現(xiàn)加載更多的文章就介紹到這了,更多相關(guān)Android加載更多內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- android RecycleView實(shí)現(xiàn)下拉刷新和上拉加載
- Android之RecycleView實(shí)現(xiàn)指定范圍的拖動效果
- Android RecycleView滑動停止后自動吸附效果的實(shí)現(xiàn)代碼(滑動定位)
- android RecycleView實(shí)現(xiàn)多級樹形列表
- Android RecycleView實(shí)現(xiàn)Item拖拽效果
- Android RecycleView和線型布局制作聊天布局
- Android移動開發(fā)recycleView的頁面點(diǎn)擊跳轉(zhuǎn)設(shè)計實(shí)現(xiàn)
- Android使用NestedScrollView?內(nèi)嵌RecycleView滑動沖突問題解決
相關(guān)文章
Android使用RollViewPager實(shí)現(xiàn)輪播圖
這篇文章主要為大家詳細(xì)介紹了Android使用RollViewPager實(shí)現(xiàn)輪播圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-04-04
Android6.0來電號碼與電話薄聯(lián)系人進(jìn)行匹配
這篇文章主要為大家詳細(xì)介紹了Android6.0來電號碼與電話薄聯(lián)系人進(jìn)行匹配的方法,感興趣的小伙伴們可以參考一下2016-07-07
android使用include調(diào)用內(nèi)部組件的方法
這篇文章主要介紹了android使用include調(diào)用內(nèi)部組件的方法,涉及Android組件調(diào)用的相關(guān)技巧,需要的朋友可以參考下2015-05-05
Android 使用fast-verification實(shí)現(xiàn)驗(yàn)證碼填寫功能的實(shí)例代碼
這篇文章主要介紹了Android 使用fast-verification實(shí)現(xiàn)驗(yàn)證碼填寫功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-04-04
Android列表實(shí)現(xiàn)(3)_自定義列表適配器思路及實(shí)現(xiàn)代碼
Android 自定義列表適配器會提供很多的便利;下面的例子為使用自定義的列表適配器來顯示列表,感興趣的朋友可以研究下2012-12-12
Android實(shí)現(xiàn)衛(wèi)星菜單效果
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)衛(wèi)星菜單效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-07-07
Android?Flutter實(shí)現(xiàn)彈簧動畫交互的示例詳解
物理模擬可以讓應(yīng)用程序的交互感覺逼真和互動,本文章實(shí)現(xiàn)了演示了如何使用彈簧模擬將小部件從拖動的點(diǎn)移回中心,感興趣的可以了解一下2023-04-04

