日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android 常驻轮询服务,Android实现自动轮询的RecycleView

發布時間:2023/12/31 Android 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android 常驻轮询服务,Android实现自动轮询的RecycleView 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

需求:類似醫院或者商場,大屏幕無限輪播item (廣告詞/廣告圖…),供大家參考,具體內容如下

代碼如下

/**

* 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 mReference;

//使用弱引用持有外部類引用->防止內存泄漏

public AutoPollTask(AutoPollRecyclerView reference) {

this.mReference = new WeakReference(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();

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持我們。

總結

如果覺得編程之家網站內容還不錯,歡迎將編程之家網站推薦給程序員好友。

本圖文內容來源于網友網絡收集整理提供,作為學習參考使用,版權屬于原作者。

小編個人微信號 jb51ccc

喜歡與人分享編程技術與工作經驗,歡迎加入編程之家官方交流群!

總結

以上是生活随笔為你收集整理的android 常驻轮询服务,Android实现自动轮询的RecycleView的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。