【问题标题】:RunOnUiThread in static method静态方法中的 RunOnUiThread
【发布时间】:2014-09-10 07:03:00
【问题描述】:

如何在 Activity 中的静态方法中使用 RunOnUiThread 以供另一个类访问? 在 MainActivity 中,我有一个使用 UtilDoc.cs 类中的值更新列表视图的方法。 错误:

错误 CS0120:非静态字段、方法或属性“Android.App.Activity.RunOnUiThread(System.Action)”(CS0120) (MyProject) 需要对象引用

MainActivity.cs:

public static void UpDateValue(string value)
{
  RunOnUiThread(() => {
          //updateListview
        });
}

UtilDoc.cs

public void SendValueListView()
{
  string value = GetValue();
  MainActivity.UpDateValue(value);
}

【问题讨论】:

  • 你根本做不到。不知道你为什么要这样做,愿意更详细地解释你想用这种架构实现什么,以及为什么这样做是一件好事?
  • @Cheesebaron 在应用程序中,用户在 gps 的位置接收列表视图以移动到接收点。它还可以通过按钮添加新点(添加位置)。所以我需要更新列表视图。
  • 这并不能真正解释您所做的设计选择...
  • @Cheesebaron 好吧,我有一个连接到我的服务器和消息传递的服务。我们在listiview 中列出这些消息(包含一个editview 和一个供用户向服务器发送命令的按钮),这些命令也放在接收服务器命令的同一个listview 中。最好的解决方案是什么?

标签: android xamarin xamarin.android xamarin-studio


【解决方案1】:

简短的回答是你不能。

相反,您可以(但可能不应该)将 UpDateValue(string value) 设为非静态方法,并为 UtilDoc 提供对 MainActivity 的引用,以便您可以调用 UpDateValue。

更好的解决方案是为 ListView 创建一个 Adapter 并告诉它更新数据。

有关 ListView 和适配器的更多信息:http://developer.xamarin.com/guides/android/user_interface/working_with_listviews_and_adapters/

【讨论】:

  • Frank,我使用 ArrayAdapter 来填充 ListView,但我无法通过在后台运行的服务更新列表视图(即使使用 ArrayAdapter)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多