软件编程
位置:首页>> 软件编程>> Android编程>> android实现条目倒计时功能

android实现条目倒计时功能

作者:like1521  发布时间:2023-08-23 08:35:38 

标签:android,倒计时

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

布局文件:


<FrameLayout 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"
tools:context="com.example.rui.demo.list_count_down.ListCountDownActivity">

<android.support.v7.widget.RecyclerView
android:id="@+id/rv_list_count_down"
android:layout_width="match_parent"
android:layout_height="match_parent">

</android.support.v7.widget.RecyclerView>
</FrameLayout>

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<DataInfo> 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<CountDownAdapter.MyViewHoder> {

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

private final int STOP = 0x01;
private final int START = 0x02;
private final int LOOP = 0x03;

private List<DataInfo> mDatas;

public CountDownAdapter() {
}

public void setmDatas(List<DataInfo> 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<DataInfo> 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<DataInfo> 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;
}
}

来源:https://blog.csdn.net/like15835551521/article/details/80163597

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com