如何刷新或更新片段UI

时间:2019-01-28 07:16:54

标签: android android-fragments

我正在使用Bundle将数据通过Activity传递到Fragment,Bundle从计数器中获取其值,计数器基于Thread更新其值。

我能够在Fragment中获取数据,但是Fragment的UI仅在Fragment Transaction上更新,所以问题是

  

如何实时更新片段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();

}

片段交易onclick:

 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 :(得分:0)

您分割了哪些UI组件? 例如,如果您拥有TextView,而不仅仅是使用yourTextView.setText(mySpeed) 当然,您需要在片段onCreate()中绑定文本视图。 还请记住,如果要在进入其他线程后更新UI元素,则应调用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()使用相同的技术

答案 1 :(得分:0)

您可以通过attachdetach方法直接刷新,如下所示。

FragmentTransaction ft = ((AppCompatActivity) context).getSupportFragmentManager().beginTransaction();
ft.detach(f).attach(f).commit();