Recyclerview android中的计数器(剩余时间)

Recyclerview android中的计数器(剩余时间),android,progress-bar,android-recyclerview,counter,Android,Progress Bar,Android Recyclerview,Counter,我有一个recyclerview,它有circleprogreesbar,显示完成调查的剩余时间 会议开始时间=下午1点 会议结束时间=下午2时 调查活动时间为下午2点至3点(仅1小时) 我的逻辑 左时间=调查结束时间-当前时间 我的计数器未动态更新 MeetingSurveryAdapter.java public class MeetingSurveryAdapter extends RecyclerView.Adapter<MeetingSurveryAdapter.SurveyVi

我有一个
recyclerview
,它有
circleprogreesbar
,显示完成调查的剩余时间

会议开始时间=下午1点
会议结束时间=下午2时

调查活动时间为下午2点至3点(仅1小时)

我的逻辑
左时间=调查结束时间-当前时间

我的计数器未动态更新

MeetingSurveryAdapter.java

public class MeetingSurveryAdapter extends RecyclerView.Adapter<MeetingSurveryAdapter.SurveyViewHolder> {

        private static final String TAG = "SurveryAdapter";

        private List<MeetingSurveyModel> list;
        MeetingSurveyModel model;
        private Context mContext;
        private int mSize;
        private UtilMethods utilMethods;
        private AppCompatActivity activity;

        private int mPreviousPosition;

        // Adapters
        private ArrayAdapter<String> adapterCountry;

        private final List<SurveyViewHolder> lstHolders;

        private Handler mHandler = new Handler();
        private Runnable updateRemainingTimeRunnable = new Runnable() {
                @Override
                public void run() {
                        synchronized (lstHolders) {
                                long currentTime = System.currentTimeMillis();
                                for (SurveyViewHolder holder : lstHolders) {
                                        holder.updateTimeRemaining(currentTime);
                                }
                        }
                }
        };


        public MeetingSurveryAdapter(Context mContext, List<MeetingSurveyModel> list) {
                this.list = list;
                this.mContext = mContext;
                this.activity = (AppCompatActivity) mContext;
                utilMethods = new UtilMethods(mContext);
                lstHolders = new ArrayList<>();
                startUpdateTimer();
        }

        @Override
        public SurveyViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {

                View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.row_meeting_survey, viewGroup, false);
                SurveyViewHolder viewHolder = new SurveyViewHolder(view);
                return viewHolder;
        }

        @Override
        public void onBindViewHolder(final SurveyViewHolder surveyViewHolder, final int position) {

                model = list.get(position);
                surveyViewHolder.tvTitle.setText(model.Title);
                surveyViewHolder.tvDate.setText(utilMethods.formatDateMeetingSurvey(model.MeetingDate));
                surveyViewHolder.tvParticipantsCount.setText("Participants: " + model.Participants);

                surveyViewHolder.setData(list.get(position));
                synchronized (lstHolders) {
                        lstHolders.add(surveyViewHolder);
                }
                surveyViewHolder.updateTimeRemaining(System.currentTimeMillis());

                surveyViewHolder.relativeTitle.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                                openMettingSurveyList(surveyViewHolder, position);
                        }
                });

                if (position > mPreviousPosition) {
                        animate1(surveyViewHolder, true);
                } else {
                        animate1(surveyViewHolder, false);
                }
                mPreviousPosition = position;
        }

        private void openMettingSurveyList(SurveyViewHolder surveyViewHolder, int position) {
                MeetingSurveyModel model = list.get(position);
                Intent intent = new Intent(mContext, MeetingSurveyDetailsActivity.class);
                activity.startActivity(intent);
        }

        @Override
        public int getItemCount() {
                return list.size();
        }

        public class SurveyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

                @Bind(R.id.relative_title)
                RelativeLayout relativeTitle;
                @Bind(R.id.img_number3)
                ImageView imgNumber3;
                @Bind(R.id.tv_title)
                TextView tvTitle;
                @Bind(R.id.tv_date)
                TextView tvDate;
                @Bind(R.id.tv_participants_count)
                TextView tvParticipantsCount;
                @Bind(R.id.prg_counter)
                DonutProgress prgCounter;
                @Bind(R.id.tv_counter)
                TextView tvCounter;


                public void setData(MeetingSurveyModel item) {
                        model = item;
                        //prgCounter.setSuffixText(item.Status);
                        updateTimeRemaining(System.currentTimeMillis());
                }

                public void updateTimeRemaining(long currentTime) {
                        long timeDiff = utilMethods.getLongDate(model.MeetingDeadLine) - currentTime;
                        if (timeDiff > 0) {
                                int minutes= Integer.parseInt(String.format("%d", TimeUnit.MILLISECONDS.toMinutes(timeDiff) ));
                                prgCounter.setProgress(prgCounter.getProgress() + minutes);
                                //prgCounter.setSuffixText(""+minutes);
                        } else {
                                list.remove(getLayoutPosition());
                                notifyDataSetChanged();
                                tvCounter.setText("Expired!!");
                                //prgCounter.setSuffixText("0");
                        }
                }

                public SurveyViewHolder(View itemView) {
                        super(itemView);
                        ButterKnife.bind(this, itemView);
                        prgCounter.setTextSize(18);
                        prgCounter.setTextColor(mContext.getResources().getColor(R.color.black));
                }

                @Override
                public void onClick(View view) {
                        switch (view.getId()) {
                        }
                }
        }

        private void startUpdateTimer() {
                Timer tmr = new Timer();
                tmr.schedule(new TimerTask() {
                        @Override
                        public void run() {
                                mHandler.post(updateRemainingTimeRunnable);
                        }
                }, 1000, 1000);
        }

        public void animate1(RecyclerView.ViewHolder holder, boolean goesDown) {
                int holderHeight = holder.itemView.getHeight();
                holder.itemView.setPivotY(goesDown == true ? 0 : holderHeight);

                AnimatorSet animatorSet = new AnimatorSet();
                ObjectAnimator animatorTranslateY = ObjectAnimator.ofFloat(holder.itemView, "translationY", goesDown == true ? 200 : 0, 0);
                animatorTranslateY.setInterpolator(new AccelerateInterpolator());

                animatorTranslateY.setDuration(700);
                animatorTranslateY.start();
        }
}
公共类会议SurveyAdapter扩展了RecyclerView.Adapter{
私有静态最终字符串TAG=“SurveryAdapter”;
私人名单;
会议调查模型;
私有上下文;
私有int-mSize;
私人效用方法效用方法;
私人活动;
私人职位;
//适配器
私人阵列适配器国家;
私人最终名单持有人;
私有处理程序mHandler=新处理程序();
private Runnable UpdateMainingTimeRunnable=new Runnable(){
@凌驾
公开募捐{
已同步(LST){
长currentTime=System.currentTimeMillis();
用于(测量夹持器:LST持器){
holder.updateTimeRemaining(当前时间);
}
}
}
};
公共会议SurveyAdapter(上下文mContext,列表){
this.list=列表;
this.mContext=mContext;
this.activity=(AppCompatActivity)mContext;
utilMethods=新的utilMethods(mContext);
lstHolders=新的ArrayList();
startUpdateTimer();
}
@凌驾
public SurveyViewHolder onCreateViewHolder(视图组视图组,int i){
View View=LayoutInflater.from(viewGroup.getContext()).flate(R.layout.row\u meeting\u survey,viewGroup,false);
SurveyViewHolder=new SurveyViewHolder(视图);
返回视图持有者;
}
@凌驾
BindViewHolder上的公共无效(最终调查问卷调查问卷调查问卷调查问卷,最终内部位置){
model=list.get(位置);
surveyViewHolder.tvTitle.setText(model.Title);
surveyViewHolder.tvDate.setText(utilMethods.formatDateMeetingSurvey(model.MeetingDate));
surveyViewHolder.tv participantsunt.setText(“参与者:“+model.Participants”);
surveyViewHolder.setData(list.get(position));
已同步(LST){
添加(surveyViewHolder);
}
surveyViewHolder.updateTimerMaining(System.currentTimeMillis());
surveyViewHolder.relativeTitle.setOnClickListener(新视图.OnClickListener()){
@凌驾
公共void onClick(视图v){
openMettingSurveyList(surveyViewHolder,位置);
}
});
如果(位置>前一位置){
animate1(surveyViewHolder,true);
}否则{
动画1(surveyViewHolder,false);
}
mPreviousPosition=位置;
}
私有void openettingsurveylist(SurveyViewHolder SurveyViewHolder,int位置){
MeetingSurveyModel=list.get(位置);
意向意向=新意向(mContext,MeetingSurveyDetailsActivity.class);
活动。开始触觉(意图);
}
@凌驾
public int getItemCount(){
返回list.size();
}
公共类SurveyViewHolder扩展了RecyclerView.ViewHolder实现了View.OnClickListener{
@绑定(R.id.relative_title)
相对的;相对的;
@绑定(R.id.img\U编号3)
ImageView imgNumber3;
@绑定(R.id.tv\U标题)
文本视图标题;
@绑定(R.id.tv\U日期)
文本视图日期;
@绑定(R.id.tv\U参与者\U计数)
TextView tv participantsunt;
@绑定(R.id.prg\U计数器)
不进行进度计算;
@绑定(R.id.tv\U计数器)
文本视图电视计数器;
公共void设置数据(MeetingSurveyModel项目){
模型=项目;
//prgCounter.setSuffixText(项目状态);
UpdateTimerMaining(System.currentTimeMillis());
}
public void updateTimeRemaining(长currentTime){
long-timeDiff=utilMethods.getLongDate(model.MeetingDeadLine)-当前时间;
如果(时间差>0){
int minutes=Integer.parseInt(String.format(“%d”,TimeUnit.ms.toMinutes(timeDiff));
prgCounter.setProgress(prgCounter.getProgress()+分钟);
//prgCounter.setSuffixText(“+”分钟);
}否则{
list.remove(getLayoutPosition());
notifyDataSetChanged();
tvCounter.setText(“过期!!”);
//prgCounter.setSuffixText(“0”);
}
}
公共调查查看文件夹(查看项目视图){
超级(项目视图);
ButterKnife.bind(这个,itemView);
prgCounter.setTextSize(18);
prgCounter.setTextColor(mContext.getResources().getColor(R.color.black));
}
@凌驾
       private void startUpdateTimer() {
                Timer tmr = new Timer();
                tmr.schedule(new TimerTask() {
                        @Override
                        public void run() {
                                mHandler.post(updateRemainingTimeRunnable);
                        }
                }, 1000, 1000);
        }
        private Runnable updateRemainingTimeRunnable = new Runnable() {
                @Override
                public void run() {
                        synchronized (lstHolders) {
                                long currentTime = System.currentTimeMillis();
                                for (SurveyViewHolder holder : lstHolders) {
                                        holder.updateTimeRemaining(currentTime);
                                }
                        }
                        mHandler.postDelayed(this, 1000);
                }
        };
        ......
        private void startUpdateTimer() {
             mHandler.postDelayed(updateRemainingTimeRunnable,1000);
        }