簡體   English   中英

將事件中的字符串傳遞給Android Xamarin Visual Studio中的MainActivity

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM