android item倒计时功能,android实现条目倒计时功能

本文介绍了一个使用Android RecyclerView实现倒计时功能的示例。通过创建一个倒计时条目适配器,结合Handler消息机制,实现在每个条目上进行独立的倒计时操作。代码示例包括Activity、Adapter和数据实体类的详细实现。
摘要由CSDN通过智能技术生成

网上对于这样的功能已经是泛滥成河了,但是最近遇到这样的一个需求,还是要值得我们学习一下,并将他记录下来。

布局文件:

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

tools:context="com.example.rui.demo.list_count_down.ListCountDownActivity">

android:id="@+id/rv_list_count_down"

android:layout_width="match_parent"

android:layout_height="match_parent">

Activity界面:

public class ListCountDownActivity extends AppCompatActivity {

RecyclerView mRecyclerView;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_list_count_down);

initView();

}

private void initView() {

mRecyclerView = (RecyclerView) findViewById(R.id.rv_list_count_down);

mRecyclerView.setLayoutManager(new LinearLayoutManager(this));

CountDownAdapter adapter = new CountDownAdapter();

mRecyclerView.setAdapter(adapter);

List list = new ArrayList<>();

for (int i = 1; i < 101; i++) {

list.add(new DataInfo("我是条目" + i, i * 100));

}

adapter.setmDatas(list);

}

}

倒计时条目适配器:

/**

* @Date 2018/4/26

* @Introduction 倒计时条目适配器

*/

public class CountDownAdapter extends RecyclerView.Adapter {

private final String TAG = CountDownAdapter.class.getSimpleName();

private final int STOP = 0x01;

private final int START = 0x02;

private final int LOOP = 0x03;

private List mDatas;

public CountDownAdapter() {

}

public void setmDatas(List mDatas) {

this.mDatas = mDatas;

notifyDataSetChanged();

}

@Override

public MyViewHoder onCreateViewHolder(ViewGroup parent, int viewType) {

return new MyViewHoder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_count_down, parent, false));

}

@Override

public void onBindViewHolder(final MyViewHoder holder, int position) {

final DataInfo info = mDatas.get(position);

holder.tvName.setText(info.getName());

holder.tvTime.setText(info.getTime() + "");

if (info.isCountDown()) {

holder.btnStart.setText("停止");

} else {

holder.btnStart.setText("开始");

}

holder.btnStart.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {

Message msg = Message.obtain();

if (!info.isCountDown()) {

holder.btnStart.setText("停止");

msg.what = START;

} else {

holder.btnStart.setText("开始");

msg.what = STOP;

}

msg.obj = info;

mHandler.sendMessage(msg);

info.setCountDown(!info.isCountDown());

}

});

}

@Override

public int getItemCount() {

return mDatas == null ? 0 : mDatas.size();

}

static class MyViewHoder extends RecyclerView.ViewHolder {

private final TextView tvName;

private final TextView tvTime;

private final Button btnStart;

public MyViewHoder(View itemView) {

super(itemView);

tvName = (TextView) itemView.findViewById(R.id.tv_name_count_down_item);

tvTime = (TextView) itemView.findViewById(R.id.tv_time_count_down_item);

btnStart = (Button) itemView.findViewById(R.id.btn_time_count_down_item);

}

}

private Handler mHandler = new Handler() {

private List mCountDownList = new ArrayList<>();

@Override

public void handleMessage(Message msg) {

setChange(msg);

}

private synchronized void setChange(Message msg) {

switch (msg.what) {

case STOP:

DataInfo stopInfo = (DataInfo) msg.obj;

Log.e(TAG, "------------stop:" + stopInfo.getName());

mCountDownList.remove(stopInfo);

notifyDataSetChanged();

if (mCountDownList.size() <= 0) {

mHandler.removeCallbacksAndMessages(null);

}

break;

case START:

DataInfo startInfo = (DataInfo) msg.obj;

Log.e(TAG, "------------start:" + startInfo.getName());

if (startInfo.getTime() > 0) {

mCountDownList.add(startInfo);

mHandler.sendEmptyMessageDelayed(LOOP, 1000);

}

break;

case LOOP:

if (mCountDownList.size() <= 0) {

return;

}

for (Iterator iterator = mCountDownList.iterator(); iterator.hasNext(); ) {

DataInfo dataInfo = iterator.next();

int time = dataInfo.getTime();

time--;

dataInfo.setTime(time);

if (time <= 0) {

iterator.remove();

}

}

notifyDataSetChanged();

mHandler.removeCallbacksAndMessages(null);

mHandler.sendEmptyMessageDelayed(LOOP, 1000);

break;

default:

break;

}

}

};

}

JavaBean类

/**

* @Date 2018/4/26

* @Introduction 倒计时数据实体类

*/

public class DataInfo {

private String name;

private int time;

private boolean isCountDown = false;

public DataInfo(String name, int time) {

this.name = name;

this.time = time;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getTime() {

return time;

}

public void setTime(int time) {

this.time = time;

}

public boolean isCountDown() {

return isCountDown;

}

public void setCountDown(boolean countDown) {

isCountDown = countDown;

}

}

以上就是条目中倒计时的一个小Demo。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值