![](/img/trans.png)
[英]Passing string/method form MainPage to MainActivity Xamarin
[英]Passing a string from an event to MainActivity in Android Xamarin Visual Studio
該項目是在Xamarin的Visual Studio中完成的,面向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));
}
}
嘗試這樣的事情:
在此處傳遞上下文:
public KontaktScanner(Activity activity)
{
// Set Space listener
proximityManager.SetSpaceListener(new KontaktSimpleSpaceListener(activity));
}
然后:
class KontaktSimpleSpaceListener : SimpleSpaceListener
{
Activity context
public KontaktSimpleSpaceListener(Activity activity)
{
this.context = activity;
}
public void OnRegionEntered(IBeaconRegion beaconRegion)
{
Log.Info(TAG, string.Format("Entered {0} region", beaconRegion.Identifier));
MainActivity myActivity = (MainActivity) context;
myActivity.updateTextView("My Data");// pass the string here.
}
public void OnRegionAbandoned(IBeaconRegion beaconRegion)
{
Log.Info(TAG, string.Format("Abandoned {0} region", beaconRegion.Identifier));
MainActivity myActivity = (MainActivity) context;
myActivity.updateTextView("My another data");// pass the string here.
}
}
然后在MainActivity
創建方法:
public void updateTextView(string s)
{
RunOnUiThread(() =>
{
yourTextView.Text = s;//set your TextView here
});
}
我沒有檢查語法,但類似的東西應該起作用。
如果在此視頻中找到答案,請訪問: https : //forums.xamarin.com/discussion/comment/308314#Comment_308314
感謝大家的幫助。 高度贊賞
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.