-1

Я вызываю функцию интерфейса через адаптер, который запускает диалоговое окно. Я хочу обновить список просмотра ресайклеров на основе того, как пользователь взаимодействует с диалоговым окном, то есть нажимает ли он положительную кнопку или отрицательную кнопку.Ошибка при обновлении списка recyclerview?

Проблема, я столкнулся:

подхода Я попытался, когда пользователь нажимает положительную или отрицательную кнопку обновление глобальных переменных и на основе этого результата выполнения операции. Но проблема, с которой я столкнулась, - это функция, возвращающая глобальное значение еще до того, как пользователь нажмет кнопку ok/cancel.

усыновителя, откуда я звоню функции:

holder.actionTask.setOnTouchListener(new View.OnTouchListener() { 
       @Override 
       public boolean onTouch(View view, MotionEvent motionEvent) { 

        Context mainActivityContext= Constants.getContext(); 

        if (action_id.equals("pain")) 
        { 

         if (mainActivityContext!=null && mainActivityContext instanceof MainActivity) 
         { 
          interfaceAdapter=((HealthVitalsFunction) mainActivityContext); 
          interfaceAdapter.openPainRecordDialog(context,dbHelper); 

          Toast.makeText(context,"Pain "+Boolean.toString(Constant.taskdone), Toast.LENGTH_SHORT).show(); 
         } 

        } 
     } 
} 

openPainRecordDialog функция:

@Override 
    public boolean openPainRecordDialog(final Context context, final DbHelper dbHelper) { 


     alertDialogBuilder 
       .setCancelable(false) 
       .setPositiveButton("ADD", new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 

      **Constants.taskDone=true;** 
       }) 
       .setNegativeButton("CANCEL", new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
      Constants.taskDone=false; 
         dialog.cancel(); 
        } 
       }); 

     AlertDialog alertDialog = alertDialogBuilder.create(); 

     alertDialog.show(); 

     return Constants.taskDone; 

    } 

Глобальная переменная:

public class Constants { 
      public static boolean taskDone; 
} 
+0

вы можете поделиться какой-то код? –

+0

Я добавил код @SurajRao –

+0

Какую глобальную переменную вы используете в apater? показать нам код –

ответ

0

Значение по умолчанию для булева ложно так что даже если вы не назначили значение, оно возвращает false

вы можете сделать, как использовать недостоверную для отмены и просто список обновлений, как

создать метод внутри класса адаптера

public void update(ArrayList<Model> modelList){ 
    adapterModelList.clear(); 
    for (Product model: modelList) { 
     adapterModelList.add(model); 
    } 
    notifyDataSetChanged(); 
} 

Называйте это как

((MyRecyclerAdapter)recyclerView.getAdapter()).update(modelList); 
+0

Где я могу назвать метод обновления? в адаптере? означает, как. мой адаптер и recyclerview определяется вызовом адаптера активности –

+0

, если вы хотите позвонить внутри адаптера, чем просто назвать его как обновление (modelList) , если вы хотите позвонить деятельности или фрагмента, которые создают Adpter экземпляр , чем назвать его как . ((MyRecyclerAdapter) recyclerView.getAdapter()) обновление (modelList); –

+0

Я вызываю обновление (список моделей) везде, где обновляется список. Есть ли другой альтернативный вызов функции внутри адаптера. Вторая точка, эта функция вызывается только тогда, когда я прокручиваю recyclerview. –