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)換成一個(gè)Java Bean,免去我們根據(jù)json字符串手寫對應(yīng)Java Bean的過程。
定義一個(gè)類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)定義一個(gè)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)容 //兩個(gè)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)建一個(gè)方法來設(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)指定范圍的拖動(dòng)效果
- Android RecycleView滑動(dòng)停止后自動(dòng)吸附效果的實(shí)現(xiàn)代碼(滑動(dòng)定位)
- android RecycleView實(shí)現(xiàn)多級樹形列表
- Android RecycleView實(shí)現(xiàn)Item拖拽效果
- Android RecycleView和線型布局制作聊天布局
- Android移動(dòng)開發(fā)recycleView的頁面點(diǎn)擊跳轉(zhuǎn)設(shè)計(jì)實(shí)現(xiàn)
- Android使用NestedScrollView?內(nèi)嵌RecycleView滑動(dòng)沖突問題解決
相關(guān)文章
Android使用RollViewPager實(shí)現(xiàn)輪播圖
這篇文章主要為大家詳細(xì)介紹了Android使用RollViewPager實(shí)現(xiàn)輪播圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-04-04Android6.0來電號碼與電話薄聯(lián)系人進(jìn)行匹配
這篇文章主要為大家詳細(xì)介紹了Android6.0來電號碼與電話薄聯(lián)系人進(jìn)行匹配的方法,感興趣的小伙伴們可以參考一下2016-07-07android使用include調(diào)用內(nèi)部組件的方法
這篇文章主要介紹了android使用include調(diào)用內(nèi)部組件的方法,涉及Android組件調(diào)用的相關(guān)技巧,需要的朋友可以參考下2015-05-05Android 使用fast-verification實(shí)現(xiàn)驗(yàn)證碼填寫功能的實(shí)例代碼
這篇文章主要介紹了Android 使用fast-verification實(shí)現(xiàn)驗(yàn)證碼填寫功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04Android列表實(shí)現(xiàn)(3)_自定義列表適配器思路及實(shí)現(xiàn)代碼
Android 自定義列表適配器會(huì)提供很多的便利;下面的例子為使用自定義的列表適配器來顯示列表,感興趣的朋友可以研究下2012-12-12Android實(shí)現(xiàn)衛(wèi)星菜單效果
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)衛(wèi)星菜單效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-07-07Android?Flutter實(shí)現(xiàn)彈簧動(dòng)畫交互的示例詳解
物理模擬可以讓應(yīng)用程序的交互感覺逼真和互動(dòng),本文章實(shí)現(xiàn)了演示了如何使用彈簧模擬將小部件從拖動(dòng)的點(diǎn)移回中心,感興趣的可以了解一下2023-04-04