在片段中反复调用一个函数?

时间:2019-07-02 18:00:37

标签: android android-studio android-fragments

我有一个主要活动的片段。我正在尝试在用户移动时使用用户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 :(得分:0)

也许这是可行的

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)并传递当前片段。

答案 1 :(得分:0)

尝试使用处理程序,类似这样的事情应该起作用

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

该代码可能是错误的,因为我将其写在脑海中,但它应该为您提供一个良好的开端