从类中调用Activity的方法

时间:2018-02-05 08:16:35

标签: c# .net xamarin xamarin.android

我的活动名为BarcodeScanActivity,其方法为 OnScanDataPass 。我想从非Activity类(Normal Calss)访问此方法。

public class BarcodeScanActivity : Activity, EMDKManager.IEMDKListener
{
     static IScanDataPass _scanDataPass;

     public void OnScanDataPass(IScanDataPass scanDataPass)
     {
         _scanDataPass = scanDataPass;
     }
}

以下是我的班级

public class ScanCode_Android : IScanCode, IScanDataPass
{
        static Context context = Application.Context;
        private Intent intent = new Intent(context,typeof(BarcodeScanActivity));
        private BarcodeScanActivity scan = new BarcodeScanActivity();

        public ScanCode_Android()
        {
            context.StartActivity(intent);
            scan.OnScanDataPass(this);
        }
}

以上代码段显示了我尝试过的方法。 如何从普通类中调用活动中的方法? 我怎么能用Intent做到?

1 个答案:

答案 0 :(得分:0)

您无法手动实例化Activity,Activity的实例将由System实例化,其过程很复杂。

您可以将Activity的实例传递给您的Normal Class以实现您的目标:

public class ScanCode_Android : IScanCode, IScanDataPass 
{ 
        BarcodeScanActivity mContext ;

        public ScanCode_Android(BarcodeScanActivity context) 
        {   
            this.mContext=context;
            Intent intent = new Intent(context,typeof(BarcodeScanActivity));
            context.StartActivity(intent);
            context.OnScanDataPass(this);
        } 
}
  

如何使用Intent进行操作?

您需要使用Context来处理它。与StartActivity, StartService...一样。

  

如何在普通班级的活动中调用方法?

与上面的代码一样,将Activity传递给Normal类。

更新

您可以创建一个像素活动,以避免看到活动。

OnePiexlActivity

[Activity(Label = "OnePiexlActivity",Theme = "@style/OnePixelActivity")]
public class OnePiexlActivity : Activity
{
    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        Window.SetGravity(GravityFlags.Left | GravityFlags.Top);
        WindowManagerLayoutParams layoutParams=  Window.Attributes;
        layoutParams.X = 0;
        layoutParams.Y = 0;
        layoutParams.Height = 1;
        layoutParams.Width = 1;
        Window.Attributes=layoutParams;
        Android.Util.Log.Error("lv","111111111111");

    }
}

style

<style name="OnePixelActivity" parent="android:Theme.Holo.Light.NoActionBar">
  <item name="android:windowIsTranslucent">true</item>
</style>