【发布时间】:2017-11-21 23:16:40
【问题描述】:
该项目在 Visual Studio 中使用 Xamarin 完成并针对 Android。
在我的简单项目中,我有 1 个活动 (MainActivity)。在这里,我创建了一个 Scanner 对象的实例,它将位于后台并监听 iBeacons。创建扫描仪后,我会在扫描仪对象上调用 Start 方法。
在 Scanner 对象的构造函数中,会设置一个 Listener 对象的实例。当检测到信标时调用此实例。
简而言之——我的主要活动是创建一个扫描仪对象的实例。在创建扫描器对象时,会创建一个侦听器对象。当检测到信标时,将激活此侦听器对象。
在我的 MainActivity 中,我有一个多行 TextView。我希望它显示在侦听器对象中找到的信标。
在主活动中将此信标 ID(字符串)传递给 TextView 的最佳方式是什么?
我是在 Android 中编程的新手,所以所有关于块、意图和你拥有什么的不同概念有点令人困惑。我原以为这是直接将数据从侦听器事件传递到 TextView,但事实证明这比预期的要困难。
我不介意放慢速度 - 所以请随时详细说明并认为我是新手:-D
更新: 我已经编辑了代码以使其尽可能短,并将其粘贴在下面。希望这能提供一个想法。
[Activity(Label = "DeviceScanSample", MainLauncher = true, Icon = "@mipmap/icon")]
public class MainActivity : Activity
{
KontaktScanner scanner;
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.Main);
// Initialize Scanner
scanner = new KontaktScanner(this);
// Button actions
startScanButton.Click += delegate
{
if (CheckPermission(Manifest.Permission.AccessCoarseLocation))
{
// Start devices scan
scanner.Start();
}
else
{
// Ask for permissions if needed
...
}
};
}
}
public class KontaktScanner : Java.Lang.Object, IOnServiceReadyListener
{
IProximityManager proximityManager;
public KontaktScanner(Context context)
{
// Set Space listener
proximityManager.SetSpaceListener(new KontaktSimpleSpaceListener());
}
public void Start()
{
proximityManager.Connect(this);
}
}
class KontaktSimpleSpaceListener : SimpleSpaceListener
{
public void OnRegionEntered(IBeaconRegion beaconRegion)
{
Log.Info(TAG, string.Format("Entered {0} region", beaconRegion.Identifier));
}
public void OnRegionAbandoned(IBeaconRegion beaconRegion)
{
Log.Info(TAG, string.Format("Abandoned {0} region", beaconRegion.Identifier));
}
}
【问题讨论】:
-
显示一些你试图创建对象和你试图传递字符串的代码。
-
@NongthonbamTonthoi - 我现在添加了部分代码。我需要能够将 log.info 文本传递回主要活动。
标签: c# visual-studio xamarin parameter-passing main-activity