Как обновить или обновить пользовательский интерфейс фрагмента - PullRequest
0 голосов
/ 28 января 2019

Я передаю данные через активность во фрагмент, используя Bundle, Bundle получает их значение из счетчика, Counter обновляет свою базу значений в Thread.

Мне удалось получить данные во Фрагменте, но пользовательский интерфейс только для фрагмента Обновление транзакции фрагмента, поэтому вопрос

как мне обновить фрагмент Ui в режиме реального времени

Код следующим образом:

    int i=0;
    Sbundle = new Bundle();
    thread = new Thread() {


        @Override
        public void run() {
            try {
                while (!thread.isInterrupted()) {
                    Thread.sleep(1000);
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            i++;
                            Sbundle.putString("speed", String.valueOf(i) );


                        }
                    });
                }
            } catch (InterruptedException e) {
            }
        }
    };
    thread.start();

}

Фрагмент транзакции при нажатии:

 public void onClick(View v) {



               speedFragment = new SpeedFragment();
                speedFragment.setArguments(Sbundle);


                RoboActivity activity = MainActivity.this;
                if (!isFinishing() && !isDestroyed()) {

                    FragmentTransaction ft = activity.getFragmentManager()
                            .beginTransaction();
                    ft.replace(R.id.fragment_container, speedFragment);
                    ft.detach(speedFragment).attach(speedFragment).commit();
                }


    }

на стороне фрагмента:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    Bundle bundle = this.getArguments();
    mySpeed = bundle.getString("speed");

        }

Ответы [ 2 ]

0 голосов
/ 28 января 2019

Вы можете напрямую обновить методы attach и detach, как показано ниже.

FragmentTransaction ft = ((AppCompatActivity) context).getSupportFragmentManager().beginTransaction();
ft.detach(f).attach(f).commit();
0 голосов
/ 28 января 2019

Какие компоненты пользовательского интерфейса у вас есть фрагмент?если у вас есть, например, TextView, чем просто использовать yourTextView.setText(mySpeed), конечно, вам нужно привязать текстовое представление перед вами в onCreate() во фрагменте.Также помните, что если вы хотите обновить элементы пользовательского интерфейса после того, как вы оказались в другом потоке, вы должны вызвать getActivity (). RunOnUiTnread (new Runnable () {....})

пример:

private void toggleLoadingIndicator(boolean toShow) {
    getActivity().runOnUiThread(new Runnable() {
      @Override
      public void run() {
        loadingIndicator.setVisibility((toShow ? View.VISIBLE : View.INVISIBLE));
      }
    });
  }

Вы можете использовать ту же технику для TextView.setText()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...