RecyclerView的基本使用(優化圖片載入、設定條目間距、設定Adapter、設定點選事件等)
首先需要v7包
如果顯示的是圖片,可以用下面這個AutoLoadRecyclerView,他可以在快速滑動時停止載入,避免OOM和記憶體資源浪費
public class AutoLoadRecyclerView extends RecyclerView { public AutoLoadRecyclerView(Context context) { this(context, null); } public AutoLoadRecyclerView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public AutoLoadRecyclerView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); setOnScrollListener(new AutoLoadScrollListener(null, true, true)); } /** * 配置顯示圖片,需要設定這幾個引數,快速滑動時,暫停圖片載入 * * @param imageLoader ImageLoader例項物件 * @param pauseOnScroll * @param pauseOnFling */ public void setOnPauseListenerParams(ImageLoader imageLoader, boolean pauseOnScroll, boolean pauseOnFling) { setOnScrollListener(new AutoLoadScrollListener(imageLoader, pauseOnScroll, pauseOnFling)); } //載入更多的回撥介面 public interface onLoadMoreListener { void loadMore(); } /** * 滑動自動載入監聽器 */ private class AutoLoadScrollListener implements OnScrollListener { private ImageLoader imageLoader; private final boolean pauseOnScroll; private final boolean pauseOnFling; public AutoLoadScrollListener(ImageLoader imageLoader, boolean pauseOnScroll, boolean pauseOnFling) { super(); this.pauseOnScroll = pauseOnScroll; this.pauseOnFling = pauseOnFling; this.imageLoader = imageLoader; } @Override public void onScrollStateChanged(int i) { //根據newState狀態做處理 if (imageLoader != null) { switch (i) { case 0: imageLoader.resume(); break; case 1: if (pauseOnScroll) { imageLoader.pause(); } else { imageLoader.resume(); } break; case 2: if (pauseOnFling) { imageLoader.pause(); } else { imageLoader.resume(); } break; } } } @Override public void onScrolled(int i, int i1) { } } }
接下來在佈局檔案中使用它
RecyclerView指定縱向排列還是橫向排列是在程式碼中通過佈局管理器設定的,對於RecyclerView來說,必須設定佈局管理器,否則會報異常:<com.robosea.robofish.view.AutoLoadRecyclerView android:id="@+id/mRecyclerView" android:layout_alignParentBottom="true" android:layout_width="match_parent" android:layout_height="94px" android:background="@drawable/local_bottom_list_bg" android:paddingBottom="13px" android:paddingLeft="30px" android:paddingRight="30px" android:paddingTop="13px" android:scrollbars="none"/>
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.widget.RecyclerView$LayoutManager.onMeasure(android.support.v7.widget.RecyclerView$Recycler, android.support.v7.widget.RecyclerView$State, int, int)' on a null object
reference
設定佈局管理器,findViewById之後就設定
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
mRecyclerView.setLayoutManager(layoutManager);
那麼RecyclerView條目的間距怎麼設定呢?使用RecyclerView的addItemDecoration方法,
方法引數依靠這個類來設定:
public class SpacesItemDecoration extends RecyclerView.ItemDecoration {
private int space;
public SpacesItemDecoration(int space) {
this.space = space;
}
@Override
public void getItemOffsets(Rect outRect, int itemPosition, RecyclerView parent) {
super.getItemOffsets(outRect, itemPosition, parent);
outRect.left = space;
outRect.right = space;
outRect.bottom = space;
// Add top margin only for the first item to avoid double space between items
// if(itemPosition == 0)
// outRect.top = space;
}
}
使用的時候定義一個int值,也就是間隔的畫素,傳入SpacesItemDecoration的構造引數就可以了
int spacingInPixels = 9;
mRecyclerView.addItemDecoration(new SpacesItemDecoration(spacingInPixels));
最後就是設定Adapter了,以下面這個Adapter為例,我們可以看到展示資料和設定條目的點選事件
public class LocalVideoGalleryAdapter extends RecyclerView.Adapter<LocalVideoGalleryAdapter.ViewHolder> {
private Activity activity;
private LayoutInflater mInflater;
private List<Video> imageInfoList;
private OnItemClickLitener mOnItemClickLitener;
public LocalVideoGalleryAdapter(List<Video> imageInfoList, Activity activity) {
this.imageInfoList = imageInfoList;
this.activity = activity;
mInflater = LayoutInflater.from(activity);
}
public static class ViewHolder extends RecyclerView.ViewHolder {
public ViewHolder(View arg0) {
super(arg0);
}
ImageView mImg;
}
@Override
public int getItemCount() {
return imageInfoList.size();
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View view = mInflater.inflate(R.layout.activity_index_gallery_item, viewGroup, false);
ViewHolder viewHolder = new ViewHolder(view);
viewHolder.mImg = (ImageView) view.findViewById(R.id.id_index_gallery_item_image);
return viewHolder;
}
@Override
public void onBindViewHolder(final ViewHolder viewHolder, final int i) {
App.imageLoader.displayImage("file://" + imageInfoList.get(i).getPath(), viewHolder.mImg, App.options);
if (mOnItemClickLitener != null) {
viewHolder.itemView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mOnItemClickLitener.onItemClick(viewHolder.itemView, i);
}
});
}
}
public interface OnItemClickLitener {
void onItemClick(View view, int position);
}
public void setOnItemClickLitener(OnItemClickLitener mOnItemClickLitener) {
this.mOnItemClickLitener = mOnItemClickLitener;
}
}
我們需要寫一個ViewHolder類來繼承RecyclerView.ViewHolder
在onCreateViewHolder方法中找到條目中的View
在onBindViewHolder對條目設定資料,由於RecyclerView和其他View不同,並沒有setOnItemClickLitener這個方法,所以我們需要自己來創造一個setOnItemClickLitener方法。
做法就是對條目中的View設定點選事件在點選事件中調取我們自己定義的介面OnItemClickLitener中的回撥方法onItemClick
Activity中使用的時候,讓Activity實現我們自定義的OnItemClickLitener介面,對RecyclerView使用我們自己寫的setOnItemClickLitener方法,傳入this就可以了
mAdapter.setOnItemClickLitener(this);
在getItemCount方法中傳入條目的數量
其他相關:
mRecyclerView.scrollToPosition(position); //滾動到對應索引位置(當該位置已經展示在螢幕中時,並不會出現滾動效果)
相關推薦
RecyclerView的基本使用(優化圖片載入、設定條目間距、設定Adapter、設定點選事件等)
首先需要v7包 如果顯示的是圖片,可以用下面這個AutoLoadRecyclerView,他可以在快速滑動時停止載入,避免OOM和記憶體資源浪費 public class AutoLoadRecyclerView extends RecyclerView { p
python學習之網站的編寫(HTML,CSS,JS)(二十一)----------事件(例如點選事件等)及繫結事件的幾種方式
事件:什麼叫做事件呢,就是我們在頁面中的一些滑鼠和鍵盤操作,比如onclick就是點選事件,然後我們將介紹幾種繫結事件的方式。 1.在標籤中繫結 <div onclick="fuc()"></div> <script> fun
設定TextView部分文字下劃線並響應點選事件(SpannableString)
實現效果 textview中改變《服務條款》的顏色、增加下劃線。 實現關鍵點: SpannableString的使用 SpannableString spanText=new SpannableString(getString(R.string.d
RecyclerView使用,RecyclerView使用,增加一個item,刪除一個item,更新資料,item點選事件
build.gradle compile 'com.android.support:appcompat-v7:24.2.0' compile 'com.android.support:recyclerview-v7:24.2.0' main_a
RecyclerView通用adapter以及item點選事件的實現
今天實現內容如下: 1.實現recyclerview通用的adapter CommonAdapter 2.實現recyclerview item的點選事件 先上效果圖 viewpager+f
Android中Kotlin的學習(點選事件、跳轉、for迴圈、RecyclerView、回撥)
剛剛學習Kotlin,有什麼不對的地方請見諒。 首先屬性的宣告中有兩個很重要的關鍵字: var 和 val。 例如: var a = "hello" val b = "hello"區別是什麼呢? var可多次分配; val只能一次初始化。 點選事件: xml中View定
RecyclerView展示固定資料、上拉載入更多、下拉重新整理、點選事件、長按點選事件、刪除條目、重新整理條目、新增條目、多條目載入
1、依賴: implementation 'com.android.support:recyclerview-v7:27.0.2' 2、activity_main、 <?xml version="1.0" encoding="utf-8"?> <Li
設定RecyclerView的位置(點選回到頂部)
1 隱藏和顯示回到頂部按鈕 假設有個RecylerView rvHome;有個adapter rvHome.setAdapter(new HomeFragmentAdapter(mContext
android 自定義ListView實現下拉重新整理、分頁載入、點選事件——自定義控制元件學習(七)
package com.example.administrator.customerpulldownrefreshandpageload; import android.content.Context; import android.os.Handler; import android.os.Message
淺談tomcat優化(內存,並發,緩存,安全,網絡,系統等)
mps config 兩種 問題 adding back get ces hit 一.Tomcat內存優化Tomcat內存優化主要是對 tomcat 啟動參數優化,我們可以在 tomcat 的啟動腳本 catalina.sh 中設置 java_OPTS 參數JAVA_OPT
RecyclerView的Item點選事件,增加刪除Item瀑布流動畫效果,長按拖動Item,RecyclerView複雜佈局、實現新聞頻道選擇器
RecyclerView的Item點選事件的實現,增加和刪除Item使用瀑布流動畫效果,長按拖動Item,RecyclerView複雜佈局的實現使用、RecyclerView去實現今日頭條新聞頻道選擇器。 使用ItemTouchHelper實現Item的拖動交換,由於Recy
為RecyclerView新增優雅的點選事件、長按事件
本篇參考:Hugo的文章-Getting your clicks on RecyclerView 效果如下 一、完整的點選、長按事件支援類 先要準備一份resources res -> values ->
為RecyclerView新增點選事件、長按事件
本篇展示手機內已安裝的軟體資訊,並新增事件,效果如下 一、準備工作 儲存App資訊的bean public class AppInfo { public String name; // 應用名
3、jq動畫執行過程中不讓重複點選(即執行完動畫後點擊)
$(".btnoff").click(function(){ var offbtnStatus = false;//初始化狀態,給狀態false,不讓連續點選 if(offbtnStatus){//如果狀態為真,說明函式未執行完,return跳出 return;
[Android]RecyclerView基本使用+adapter回撥介面實現點選事件
一、概述 RrcyclerView是ListView的加強版,不僅可以輕鬆實現和ListView同樣的效果,還優化了ListView中存在的各種不同之處。 Android官方推薦我們使用RecyclerView。 二、基本用法 1.首先需要在專案的build.gradle中新增相
RecyclerView item內部點選事件、item點選事件衝突
1.recyclerview item內部控制元件沒有點選事件 在recyclerview item內部控制元件不存在點選事件的情況下。item設定點選事件可通過新增觸控事件 recyclerv
Android中RecyclerView的item中控制元件的點選事件新增刪除一行、上移下移一行的程式碼實現
Demo展示圖片 佈局程式碼 // (layout)activity_main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/an
Android中WebView載入Html中的圖片新增點選事件
基本的思路: (1)WebView來載入HTML。 (2)向HTML中注入JavaScript,利用JavaScript來呼叫Android中的方法(執行一些跳轉的操作等等)。 首先你必須有一個HTML或者是一個地址,或者是存到本地的一個檔案。我這裡使用的是存到本
iCheck表單美化外掛使用方法詳解(含引數、事件等)
iCheck 特色: 1、在不同瀏覽器(包括ie6+)和裝置上都有相同的表現 — 包括 桌面和移動裝置 2、支援觸控裝置 — iOS、Android、BlackBerry、Windows Phone等系統 4、方便定製 — 用HTML 和 CSS 即可為其設定樣式 (多套面板) 5、體積小巧 — gzi
Android-RecyclerView-Item點選事件設定
轉載請註明出處:http://write.blog.csdn.net/postedit/40423361 在上一篇部落格Android-RecylerView初識中提到,RecyclerView不再負責Item檢視的佈局及顯示,所以RecyclerView也沒有為Item