我有一个带有3个片段的标签式活动。第一个片段允许用户选择测试,第三个片段具有计时器和文本视图以及一些按钮。截至目前,第二个片段中没有任何内容。
在片段3内部,我有一个启动计时器的按钮,一旦启动计时器,textview将每分钟刷新一次,显示已经过去的时间。一切都运作良好,直到这一点。
问题:一旦计时器启动,如果我选择片段1并返回到片段3,则计时器停止更新textView。我知道timer_elapsed正在运行,只有textview没有更新。
我试过FragmentActivity.RunOnUiThread(()=> {});这可以正常工作,直到碎片被切换。
我确实尝试使用Loopers.MainLooper更新屏幕,问题仍然保持不变。
// update the screen every minute
if (mActivity != null)
{
mActivity.RunOnUiThread(() =>
{
// set the progress bar
progressBar.Progress = i32ProgressBarValue;
textViewPercentage.Text = i32ProgressBarValue + "%";
// set the text view
textViewTestTime.Text = $"{Globals.i32Days}" + "D :" + $"{Globals.i32Hours}" + "H :" + $"{Globals.i32Mins}" + "M";
});
}
我希望textView在切换片段并返回片段3时继续正确更新
我在一个示例中使用TabbedActivity中的Timer(使用BottomNavigationView),其中有三个片段,在第三个片段中,我使用按钮每两秒启动一次更新按钮的文本,它运行良好(也适用于切换片段),下面是第三个片段中的代码,你可以参考它:
Timer _dispatcherTimer;
TimerCallback timerDelegate;
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
// Use this to return your custom view for this Fragment
// return inflater.Inflate(Resource.Layout.YourFragment, container, false);
View view = inflater.Inflate(Resource.Layout.fragment_account, container, false);
init(view);
timerDelegate = new TimerCallback(Tick);
return view;
}
private void init(View view)
{
button = view.FindViewById<Button>(Resource.Id.mybutton);
button.Click += delegate
{
_dispatcherTimer = new System.Threading.Timer(timerDelegate, null, 0, 2000);
};
}
private void Tick(object state)
{
this.Activity.RunOnUiThread(() =>
{
//do something
Random reRandom = new Random();
int s = reRandom.Next(1000);
button.Text = s.ToString();
});
}