CountDownTimer with RecyclerView



我有一个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());
            }
        }
    });

最新更新