欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android 實現(xiàn)列表倒計時功能

 更新時間:2020年03月19日 21:02:05   作者:Choi晨  
這篇文章主要介紹了Android 實現(xiàn)列表倒計時功能,代碼很簡單,沒有任何難度,使用RecyclerView+BaseRecyclerViewAdapterHelper列表實現(xiàn),需要的朋友可以參考下

單個計時器,然后遍歷數(shù)據(jù) 刷新條目;

兩種實現(xiàn)方式:1、Handler輪詢; 2、子線程睡眠(時間到后 移除列表中的條目會有問題);

代碼很簡單,沒有任何難度,列表使用 RecyclerView+BaseRecyclerViewAdapterHelper實現(xiàn);

implementation 'androidx.recyclerview:recyclerview:1.1.0'
 implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:3.0.1'
 
public class MainActivity extends AppCompatActivity {
 private RecyclerView rv;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 rv = findViewById(R.id.rv);
 initView();
 initData();
 findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View view) {
  quickAdapter.addData(0,new TimeBean("附加商品、離活動結(jié)束還剩:" , 99));
  rv.scrollToPosition(0);
  }
 });
 }
 private QuickAdapter quickAdapter;
 private void initView() {
 quickAdapter = new QuickAdapter(R.layout.item);
 rv.setLayoutManager(new LinearLayoutManager(this));
 rv.setAdapter(quickAdapter);
 rv.setItemAnimator(null);
 Countdown();
 }
 private void initData() {
 List<TimeBean> datas = new ArrayList<>();
 for (int i = 1; i < 10; i++) {
  datas.add(new TimeBean("商品" + i + "、離活動結(jié)束還剩:", (i + 5) * i));
 }
 quickAdapter.setNewData(datas);
 }
 private class QuickAdapter extends BaseQuickAdapter<TimeBean, BaseViewHolder> {
 public QuickAdapter(int layoutResId) {
  super(layoutResId);
 }
 @Override
 protected void convert(BaseViewHolder vh, TimeBean datas) {
  vh.setText(R.id.tv, datas.getStr() + "");
  vh.setText(R.id.tv2, datas.getTime() + "s");
 }
 }
 private Handler mHandler = new Handler();
 private Runnable runnable;
 private void Countdown() {
 runnable = new Runnable() {
  @Override
  public void run() {
  for (int i = 0; i < quickAdapter.getData().size(); i++) {
   TimeBean bean = quickAdapter.getData().get(i);
   if (bean.getTime() > 0) {
   bean.setTime(bean.getTime() - 1);
   quickAdapter.setData(i, bean);
   } else {
   quickAdapter.remove(i);
   }
  }
  mHandler.postDelayed(runnable, 1000L);
  }
 };
 mHandler.postDelayed(runnable, 1000L);
 }
 private void Countdown2() {
 new Thread(new Runnable() {
  @Override
  public void run() {
  while (true){
   SystemClock.sleep(1000L);
   for (int i = 0; i < quickAdapter.getData().size(); i++) {
   final TimeBean bean = quickAdapter.getData().get(i);
   final int finalI = i;
   if (bean.getTime() > 0) {
    bean.setTime(bean.getTime() - 1);
    runOnUiThread(new Runnable() {
    @Override
    public void run() {
     quickAdapter.setData(finalI, bean); 
    }
    });
   } else {
    // 當時間是0時 移除條目(子線程加睡眠模式移除條目有問題,原因時數(shù)據(jù)源未更新)
    runOnUiThread(new Runnable() {
    @Override
    public void run() {
     quickAdapter.remove(finalI);
    }
    });
   }
   }
  }
  }
 }).start();
 }
 @Override
 protected void onDestroy() {
 super.onDestroy();
 mHandler.removeCallbacks(runnable);
 mHandler.removeCallbacksAndMessages(null);
 mHandler = null;
 }
public class TimeBean {
 public TimeBean(String str, int time) {
 this.str = str;
 this.time = time;
 }
 private String str;
 private int time;
}

 Get 、 Set方法就不寫了;

布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical"
 tools:context=".MainActivity">
 <Button
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:id="@+id/btn"
 android:text="ADD"
 />
 <androidx.recyclerview.widget.RecyclerView
 android:id="@+id/rv"
 android:layout_width="match_parent"
 android:layout_height="match_parent"></androidx.recyclerview.widget.RecyclerView>
</LinearLayout>
//下面是item
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="match_parent"
 xmlns:tools="http://schemas.android.com/tools"
 android:orientation="horizontal"
 android:paddingBottom="@dimen/dp_10"
 android:layout_height="60dp">
 <TextView
 android:background="#33fb1212"
 android:id="@+id/tv"
 tools:text="你好啊"
 android:gravity="center_vertical"
 android:textSize="17dp"
 android:paddingLeft="15dp"
 android:textColor="#333"
 android:layout_width="0dp"
 android:layout_weight="2"
 android:layout_height="match_parent" />
 <TextView
 android:background="#33fb1212"
 android:id="@+id/tv2"
 tools:text="0s"
 android:gravity="center_vertical"
 android:textSize="17dp"
 android:paddingLeft="15dp"
 android:textColor="#333"
 android:layout_width="0dp"
 android:layout_weight="1"
 android:layout_height="match_parent" />
</LinearLayout>

總結(jié)

到此這篇關于Android 實現(xiàn)列表倒計時功能的文章就介紹到這了,更多相關android 列表倒計時內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Android修改Dialog樣式的方法

    Android修改Dialog樣式的方法

    Android 對話框支持自定義標題,內(nèi)容,按鈕和點擊事件,基本上可以滿足我們?nèi)粘5氖褂谩?但有時候我們想要修改對話框的文字,按鈕顏色等,系統(tǒng)并沒有提供對應的方法,正常情況下只能自定義布局。 接下來通過源碼解析介紹幾種修改 Dialog樣式的方法。
    2021-05-05
  • Android自定義View實現(xiàn)拖動自動吸邊效果

    Android自定義View實現(xiàn)拖動自動吸邊效果

    這篇文章主要為大家詳細介紹了Android自定義View實現(xiàn)拖動自動吸邊效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • Android編寫Router路由框架實例過程詳解

    Android編寫Router路由框架實例過程詳解

    為什么要用路由框架,路由框架哪些好處等等,在此就不做解釋
    最常用的框架是ARouter,那是不是可以自己寫一個路由框架呢,不參考ARouter的方式
    2023-04-04
  • 基于標準http實現(xiàn)Android多文件上傳

    基于標準http實現(xiàn)Android多文件上傳

    這篇文章主要介紹了基于標準http實現(xiàn)Android多文件上傳的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • Android TimeLine 時間節(jié)點軸的實現(xiàn)實例代碼

    Android TimeLine 時間節(jié)點軸的實現(xiàn)實例代碼

    本篇文章主要介紹了Android TimeLine 時間節(jié)點軸的實現(xiàn)實例代碼,這里整理了詳細的代碼,有需要的小伙伴可以參考下。
    2017-03-03
  • Android實現(xiàn)第三方登錄的上拉展開,下拉隱藏,下拉隱藏示例

    Android實現(xiàn)第三方登錄的上拉展開,下拉隱藏,下拉隱藏示例

    本篇文章抽出了項目登錄界面中實現(xiàn)的第三方登錄,用戶可以上拉展開,下拉隱藏第三方登錄這么一個效果,提高用戶和軟件的交互性。有興趣的可以了解一下。
    2017-01-01
  • Android 桌面快捷方式實現(xiàn)實例詳解

    Android 桌面快捷方式實現(xiàn)實例詳解

    這篇文章主要為大家介紹了Android 桌面快捷方式實現(xiàn)實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • 詳解Android如何設計一個全局可調(diào)用的ViewModel對象

    詳解Android如何設計一個全局可調(diào)用的ViewModel對象

    很多時候我們需要維護一個全局可用的ViewModel,因為這樣可以維護全局同一份數(shù)據(jù)源,且方便使用協(xié)程綁定App的生命周期,那如何設計全局可用的ViewModel對象,文中介紹的非常詳細,需要的朋友可以參考下
    2023-05-05
  • App中如何獲取gradle的配置信息

    App中如何獲取gradle的配置信息

    這篇文章主要給大家介紹了關于App中如何獲取gradle的配置信息的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-02-02
  • Android自定義Chronometer實現(xiàn)短信驗證碼秒表倒計時功能

    Android自定義Chronometer實現(xiàn)短信驗證碼秒表倒計時功能

    這篇文章主要介紹了Android自定義ChronometerView實現(xiàn)類似秒表倒計時,短信驗證碼倒計時功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11

最新評論