我有一个RecyclerView,假设有10个项目。现在我想通过点击一个项目开始倒计时计时器,直到这里它工作得很好,但是当我向上滚动我的RecyclerView到最后一个位置时,倒计时计时器也在最后一个项目上开始,但我想只开始那些项目上我点击。任何帮助都会很感激。下面是我的代码:
公共类OrdersListAdapter扩展RecyclerView。适配器{
private ClickListener mListener;
private Context mContext;
private Handler handler;
private List<Integer> countList = new ArrayList<>();
private CountDownTimer countDownTimer;
private long time;
private final long interval = 1000;
public OrdersListAdapter(Context context, List<Integer> countList) {
this.mContext = context;
this.countList = countList;
}
@Override
public OrderHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View rootView = LayoutInflater.from(parent.getContext()).inflate(R.layout.adapter_orders_list, parent, false);
return new OrderHolder(rootView);
}
@Override
public void onBindViewHolder(final OrderHolder holder, final int position) {
final long time = 10*60*1000;
holder.mCardView.setTag( holder );
holder.mCardView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (mListener != null) {
OrderHolder holder = (OrderHolder) view.getTag();
if (countList.get(holder.getAdapterPosition()) == 0) {
countList.set(holder.getAdapterPosition(), 1);
startTimer(holder, time);
}
mListener.onOrderClick(holder.getAdapterPosition());
}
}
});
}
@Override
public int getItemCount() {
return 10;
}
public class OrderHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
private CardView mCardView;
private TextView mTimer;
public OrderHolder(View itemView) {
super(itemView);
mTimer = (TextView) itemView.findViewById(R.id.timer);
//itemView.setOnClickListener(this);
}
@Override
public void onClick(View view) {
if (mListener != null) {
mListener.onOrderClick(getAdapterPosition());
}
}
}
public void setClickListener(ClickListener clickListener) {
this.mListener = clickListener;
}
public interface ClickListener {
void onOrderClick(int position);
}
public void startTimer(OrderHolder holder, long time) {
//time = 20*60*1000;
countDownTimer = new MyCountDownTimer(holder, time, interval);
countDownTimer.start();
}
public class MyCountDownTimer extends CountDownTimer {
OrderHolder holder;
public MyCountDownTimer(OrderHolder holder, long startTime, long interval) {
super(startTime, interval);
this.holder = holder;
}
@Override
public void onFinish() {
}
@Override
public void onTick(long millisUntilFinished) {
millisUntilFinished = millisUntilFinished / 1000;
String time = String.format(Locale.US, "%02d:%02d",
(millisUntilFinished % 3600) / 60, (millisUntilFinished % 60));
holder.mTimer.setText(time);
}
}
}
活动中的OnClick事件
mAdapter.setClickListener(new OrdersListAdapter.ClickListener() {
@Override
public void onOrderClick(int position) {
Intent intent = new Intent(MyActivity.this, NewActivity.class);
startActivity(intent);
}
});
试试下面的代码:
holder.mCardView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (mListener != null) {
if (countList.get(holder.getPosition()) == 0) {
countList.set(holder.getPosition(), 1);
startTimer(holder.getPosition(), time);
}
mListener.onItemClick(holder.getPosition());
}
}
});