Таймер не работает должным образом в ListView

Я использовал ListView для создания своих карточек заказов. В котором я запускал непрерывный таймер для каждой карты, используя обработчик, чтобы проверить, сколько времени было потрачено. Я использовал код в адаптере. Но моя проблема в том, что когда есть более одного заказа, время таймера перекрывается на каждой карте. Например, если у меня есть 3 карты, то первая карта будет показывать время 1,2,3 один за другим с интервалом в одну секунду, а 2-я будет показывать время 2 и 3, а для 3-й таймер остановлен. Другая проблема заключается в том, что таймер останавливается после определенного количества времени. Помогите мне в этом.

Это мой фрагмент кода пользовательского адаптера:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View vv = LayoutInflater.from(mContext).inflate(R.layout.adapter_listview_newpage_card,null,false);
    menuModels = new ArrayList<>();
    // menuModels.clear();

    order_time = (TextView) vv.findViewById(R.id.order_time);


    // This is my handler of timer:

    final Handler myHandler = new Handler(); //declare this line in class
    myHandler.postDelayed( // called this line from createlaytout function first time
            new Runnable() {
                public void run() {
                    TimeZone tz = TimeZone.getTimeZone("Asia/Kolkata");
                    // Log.e("TAG", "timezone "+tz );
                    Calendar cd = Calendar.getInstance(tz);
                    int min0 = cd.get(Calendar.MINUTE);
                    int sec0 = cd.get(Calendar.SECOND);
                    int hour0 = cd.get(Calendar.HOUR_OF_DAY);
                    // int ampm0 = cd.get(Calendar.AM_PM);
                    int total = (hour0 * 60 * 60) + (min0 * 60) + sec0;
                    int finalTime = total - Integer.parseInt(data.getTimer_time());
                    int hoursnew = 0;
                    int seconds = finalTime;
                    int minutes = seconds / 60;
                    seconds = seconds % 60;

                    if (minutes > 59) {
                        hoursnew = minutes / 60;
                        minutes = minutes % 60;
                    }

                    // Log.e("TAG", "timer" + minutes + "-" + seconds + "$$" + data.getOrder_id());
                    order_time.setText(" " + data.getOrder_id() + "&" + String.format("%02d", hoursnew) + ":" + String.format("%02d", minutes) + ":" + String.format("%02d", seconds));
                    myHandler.postDelayed(this, 1000);
                }

            }, 0);


    // Here order_time is textview where I add time.

}

Обновленный код

Привет, мне удалось запустить таймер в моем коде, но проблема в том, что теперь у меня возникает исключение нулевого указателя при изменении адаптера.setnotifydata. Мой код для адаптера, в котором я устанавливаю время для просмотра текста

        public class customadapetr_new extends BaseAdapter {

              public customadapetr_new(ArrayList<DataModel> dataModels,         Context context,  NewPageActivity objNewPageActivity) {
              this.dataSet=dataModels;
                this.mContext=context;
                 this.objNewPageActivity = objNewPageActivity;
           }


           private void setTime(final int order_time, final TextView tv) {

    TimeZone tz = TimeZone.getTimeZone("Asia/Kolkata");
    //  Log.e("TAG", "timezone "+tz );
    Calendar cd = Calendar.getInstance(tz);
    int min0 = cd.get(Calendar.MINUTE);
    int sec0 = cd.get(Calendar.SECOND);
    int hour0 = cd.get(Calendar.HOUR_OF_DAY);
    // int ampm0 = cd.get(Calendar.AM_PM);
    int total = (hour0 * 60 * 60) + (min0 * 60) + sec0;
    int finalTime = total - order_time;
    int hoursnew = 0;
    int seconds = finalTime;
    int minutes = seconds / 60;
    seconds = seconds % 60;


    if (minutes > 59) {
        hoursnew = minutes / 60;
        minutes = minutes % 60;

    }

    tv.setText(" " + String.format("%02d", hoursnew) + ":" + String.format("%02d", minutes));


}

}

И мой код, из которого я вызвал обработчик

       public class NewPageActivity extends Fragment{
       private final Runnable timerRunnable = new Runnable() {
         @Override
         public void run() {

        Log.e("TAG", "run:timer run run " );
        adapter.notifyDataSetChanged();
        timerHandler.postDelayed(this, 60000); //run every minute
      }
};

}

Я получаю сообщение об ошибке в adapter.notifyDataSetChanged() и прикрепляю ссылку на скриншот ошибки, например http://prntscr.com/dmxjr9


person Deepanshi Gupta    schedule 13.12.2016    source источник