Повторно вызывать функцию во фрагменте? - PullRequest
0 голосов
/ 02 июля 2019

У меня есть фрагмент, который завершает основную деятельность. Я пытаюсь обновить текстовое поле с указанием местоположения пользователей GPS по мере их перемещения. В настоящее время он у меня есть, поэтому каждый раз, когда вы возобновляете фрагмент, он обновляется, но я бы хотел, чтобы это происходило автоматически каждые 10 секунд или около того.

В настоящее время я пытаюсь использовать runOnUiThread, который не вызывал сбой моего приложения, но, похоже, ничего не делал.

Внутри фрагмента:

@Override
public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
   super.onViewCreated(view, savedInstanceState);
   TextView newText = getView().findViewById(R.id.wText);
   newText.setText(getStringCoordinates);
   getActivity().runOnUiThread(new Runnable() {
            @Override
            public void run() {                 
               newText.setText(getStringCoordinates);
            }
        });
}

Ответы [ 2 ]

0 голосов
/ 02 июля 2019

Попробуйте использовать обработчик, что-то вроде этого должно работать

private Handler myHandler;
private static final int DELAY = 10000;

@Override
protected void onResume() {
    super.onResume();
    myHandler = new Handler(Looper.getMainLooper());
    checkAgain();
}

private void checkAgain() {
    myHandler.postDelayed(()-> checkGps(),DELAY);
}

private void checkGps() {
    //do stuff here
    checkAgain();
}

@Override
protected void onStop() {
    super.onStop();
    myHandler.removeCallbacksAndMessages(null);
    myHandler = null;
}

в основном каждые 10 секунд отправляет сообщение в основной поток для проверки gps

код может быть неправильным, потому что я пишу ему с головы до головы, но он должен дать вам хорошее начало

0 голосов
/ 02 июля 2019

Может быть, это работает

public class c_Thread_Update_Fragment extends Thread {

int i =0;

 c_Thread_Update_Fragment(FragmentManager fm, ViewPager vp)
    {
        this.fragmentManager =fm;
        this.mViewpager =vp;
    }

 @Override
    public void run() {
while(true)
{
    f.getActivity().runOnUiThread(new Runnable() {

         @Override
         public void run() {
         yourfragmentclass.updateData(i);

            }               
         });

     i++;
sleep(1000);


}

}

       public static void setFragment(Fragment f){
        f =f;
        }

}
  1. Реализация public static void update (xxx){} в вашем классе фрагментов
  2. Использование setFragment(f) в вашем классе адаптера Fragment и передача текущего фрагмента.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...