TextView 不显示分配给文本的字符串 属性
TextView not displaying the string assigned to the Text property
我有一个 TextView 定义如下:
<TextView
android:id="@+id/middleText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="Click the mail button" />
我得到了这样的参考:
private TextView _textView;
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
Xamarin.Essentials.Platform.Init(this, savedInstanceState);
SetContentView(Resource.Layout.activity_main);
_textView = FindViewById<TextView>(Resource.Id.middleText);
单击视图中的按钮时,将运行以下代码:
if (_accelerometerController.IsStarted)
{
_accelerometerController.Stop();
_timer?.Stop();
_timer?.Dispose();
_timer = null;
}
else
{
_accelerometerController.Start();
_timer = new Timer(1000);
_timer.Elapsed += Timer_Elapsed;
_timer.AutoReset = true;
_timer.Enabled = true;
}
当调用 _timer.Elapsed 事件时,运行以下代码:
private void Timer_Elapsed(object sender, ElapsedEventArgs e)
{
//MainThread.BeginInvokeOnMainThread(() => _textView.Text = _accelerometerController.Status);
//_textView.SetText(_accelerometerController.Status, TextView.BufferType.Normal);
//RunOnUiThread(() => _textView.Text = _accelerometerController.Status);
_textView.Text = _accelerometerController.Status;
_textView.Invalidate();
}
_textView.Text 属性 设置正确,但图形大部分时间不会更新以显示新字符串。一旦应用程序选择不更新图形,它就不会恢复,文本似乎永远都是一样的,调试时我可以看到文本 属性 设置正确,其他控件继续工作。
我试过用多种不同的方式设置文本,但都产生了相同的结果。
我是 Xamarin 的新手,我不确定项目类型,我为此项目选择了“Android App (Xamarin)”项目模板,我不确定是否与 Xamarin.Forms.
相同或包括 Xamarin.Forms.
为什么会这样?我该如何解决?
如果你使用Xamarin.Android项目,可以参考下面的代码。
布局:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/middleText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="Click the mail button" />
<Button
android:id="@+id/button1"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
Activity:由于不知道_accelerometerController是什么,直接启动定时器
public class Activity8 : Activity
{
private TextView _textView;
private Button button;
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
// Create your application here
SetContentView(Resource.Layout.layout8);
_textView = FindViewById<TextView>(Resource.Id.middleText);
button = FindViewById<Button>(Resource.Id.button1);
button.Click += Button_Click;
}
private void Button_Click(object sender, EventArgs e)
{
Timer _timer = new Timer(1000);
_timer.Elapsed += Timer_Elapsed;
_timer.AutoReset = true;
_timer.Enabled = true;
}
private void Timer_Elapsed(object sender, ElapsedEventArgs e)
{
//MainThread.BeginInvokeOnMainThread(() => _textView.Text = _accelerometerController.Status);
//_textView.SetText(_accelerometerController.Status, TextView.BufferType.Normal);
//RunOnUiThread(() => _textView.Text = _accelerometerController.Status);
_textView.Text = "Hello";
_textView.Invalidate();
}
}
我有一个 TextView 定义如下:
<TextView
android:id="@+id/middleText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="Click the mail button" />
我得到了这样的参考:
private TextView _textView;
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
Xamarin.Essentials.Platform.Init(this, savedInstanceState);
SetContentView(Resource.Layout.activity_main);
_textView = FindViewById<TextView>(Resource.Id.middleText);
单击视图中的按钮时,将运行以下代码:
if (_accelerometerController.IsStarted)
{
_accelerometerController.Stop();
_timer?.Stop();
_timer?.Dispose();
_timer = null;
}
else
{
_accelerometerController.Start();
_timer = new Timer(1000);
_timer.Elapsed += Timer_Elapsed;
_timer.AutoReset = true;
_timer.Enabled = true;
}
当调用 _timer.Elapsed 事件时,运行以下代码:
private void Timer_Elapsed(object sender, ElapsedEventArgs e)
{
//MainThread.BeginInvokeOnMainThread(() => _textView.Text = _accelerometerController.Status);
//_textView.SetText(_accelerometerController.Status, TextView.BufferType.Normal);
//RunOnUiThread(() => _textView.Text = _accelerometerController.Status);
_textView.Text = _accelerometerController.Status;
_textView.Invalidate();
}
_textView.Text 属性 设置正确,但图形大部分时间不会更新以显示新字符串。一旦应用程序选择不更新图形,它就不会恢复,文本似乎永远都是一样的,调试时我可以看到文本 属性 设置正确,其他控件继续工作。 我试过用多种不同的方式设置文本,但都产生了相同的结果。
我是 Xamarin 的新手,我不确定项目类型,我为此项目选择了“Android App (Xamarin)”项目模板,我不确定是否与 Xamarin.Forms.
相同或包括 Xamarin.Forms.为什么会这样?我该如何解决?
如果你使用Xamarin.Android项目,可以参考下面的代码。
布局:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/middleText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="Click the mail button" />
<Button
android:id="@+id/button1"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
Activity:由于不知道_accelerometerController是什么,直接启动定时器
public class Activity8 : Activity
{
private TextView _textView;
private Button button;
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
// Create your application here
SetContentView(Resource.Layout.layout8);
_textView = FindViewById<TextView>(Resource.Id.middleText);
button = FindViewById<Button>(Resource.Id.button1);
button.Click += Button_Click;
}
private void Button_Click(object sender, EventArgs e)
{
Timer _timer = new Timer(1000);
_timer.Elapsed += Timer_Elapsed;
_timer.AutoReset = true;
_timer.Enabled = true;
}
private void Timer_Elapsed(object sender, ElapsedEventArgs e)
{
//MainThread.BeginInvokeOnMainThread(() => _textView.Text = _accelerometerController.Status);
//_textView.SetText(_accelerometerController.Status, TextView.BufferType.Normal);
//RunOnUiThread(() => _textView.Text = _accelerometerController.Status);
_textView.Text = "Hello";
_textView.Invalidate();
}
}