中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android如何實現自動輪詢RecycleView?

發布時間:2020-06-23 15:19:56 來源:億速云 閱讀:196 作者:清晨 欄目:移動開發

這篇文章將為大家詳細講解有關Android如何實現自動輪詢RecycleView?,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。


代碼如下

/**
 * Created by Xia_焱 on 2017/8/20.
 */

public class AutoPollRecyclerView extends RecyclerView {
 private static final long TIME_AUTO_POLL = 32;
 AutoPollTask autoPollTask;
 private boolean running; //標示是否正在自動輪詢
 private boolean canRun;//標示是否可以自動輪詢,可在不需要的是否置false
 public AutoPollRecyclerView(Context context, @Nullable AttributeSet attrs) {
 super(context, attrs);
 autoPollTask = new AutoPollTask(this);
 }
 static class AutoPollTask implements Runnable {
 private final WeakReference<AutoPollRecyclerView> mReference;
 //使用弱引用持有外部類引用->防止內存泄漏
 public AutoPollTask(AutoPollRecyclerView reference) {
 this.mReference = new WeakReference<AutoPollRecyclerView>(reference);
 }
 @Override
 public void run() {
 AutoPollRecyclerView recyclerView = mReference.get();
 if (recyclerView != null && recyclerView.running &&recyclerView.canRun) {
 recyclerView.scrollBy(2, 2);
 recyclerView.postDelayed(recyclerView.autoPollTask,recyclerView.TIME_AUTO_POLL);
 }
 }
 }
 //開啟:如果正在運行,先停止->再開啟
 public void start() {
 if (running)
 stop();
 canRun = true;
 running = true;
 postDelayed(autoPollTask,TIME_AUTO_POLL);
 }
 public void stop(){
 running = false;
 removeCallbacks(autoPollTask);
 }
 @Override
 public boolean onTouchEvent(MotionEvent e) {
 switch (e.getAction()){
 case MotionEvent.ACTION_DOWN:
 if (running)
  stop();
 break;
 case MotionEvent.ACTION_UP:
 case MotionEvent.ACTION_CANCEL:
 case MotionEvent.ACTION_OUTSIDE:
 if (canRun)
  start();
 break;
 }
 return super.onTouchEvent(e);
 }
}

開啟:如果正在運行,先停止->再開啟

public void start() {
 if (running)
 stop();
 canRun = true;
 running = true;
 postDelayed(autoPollTask,TIME_AUTO_POLL);
 }
 public void stop(){
 running = false;
 removeCallbacks(autoPollTask);
 }
 @Override
 public boolean onTouchEvent(MotionEvent e) {
 switch (e.getAction()){
 case MotionEvent.ACTION_DOWN:
 if (running)
  stop();
 break;
 case MotionEvent.ACTION_UP:
 case MotionEvent.ACTION_CANCEL:
 case MotionEvent.ACTION_OUTSIDE:
 if (canRun)
  start();
 break;
 }
 return super.onTouchEvent(e);
 }
}

Adapter中的代碼如下

@Override
 public void onBindViewHolder(BaseViewHolder holder, int position) {
 String data = mData.get(position%mData.size());
 holder.setText(R.id.tv_content,data);
 }
 @Override
 public int getItemCount() {
 return Integer.MAX_VALUE;
 }

Activity中的代碼

mRecyclerView.setAdapter(adapter);
 if (true) //保證itemCount的總個數寬度超過屏幕寬度->自己處理
 mRecyclerView.start();

關于Android如何實現自動輪詢RecycleView?就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

高尔夫| 陆丰市| 库尔勒市| 东乡族自治县| 新干县| 启东市| 布尔津县| 惠水县| 鄢陵县| 济阳县| 郯城县| 区。| 渑池县| 宣威市| 沙雅县| 阳信县| 重庆市| 博客| 广饶县| 东阳市| 信丰县| 青川县| 纳雍县| 大城县| 扎赉特旗| 陈巴尔虎旗| 钟祥市| 绍兴县| 辽宁省| 虹口区| 宿松县| 宝坻区| 富源县| 铅山县| 扎兰屯市| 青海省| 宁都县| 天祝| 云龙县| 义马市| 隆林|