简体   繁体   English

从类中调用Activity的方法

[英]Call a method of an Activity from a class

I have Activity named BarcodeScanActivity which has a method OnScanDataPass . 我有一个名为BarcodeScanActivity Activity,它具有方法OnScanDataPass I want to access this method from a non Activity class (Normal Calss). 我想从非Activity类(Normal Calss)访问此方法。

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

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

below is my class 下面是我的课

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);
        }
}

Above code snippet shows the method i tried. 上面的代码片段显示了我尝试的方法。 How do I call a method in an activity from a normal class? 如何在普通班级的活动中调用方法? How can I do it with Intent? 如何使用Intent做到这一点?

You can not instantiate an Activity manually, the instance of Activity will be instantiated by System, and its process is complex. 您无法手动实例化活动,活动实例将由系统实例化,并且其过程很复杂。


You can pass the instance of Activity to your Normal Class to achieve your goal: 您可以将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);
        } 
}

How can I do it with Intent? 如何使用Intent做到这一点?

You need use Context to deal with it. 您需要使用上下文来处理它。 Like StartActivity, StartService... . StartActivity,StartService ...一样

How do I call a method in an activity from a normal class? 如何在普通班级的活动中调用方法?

Like the above codes, pass Activity to Normal class. 像上面的代码一样,将Activity传递给Normal类。

Update: 更新:

You can create one pixel Activity to avoid the Activity to been seen. 您可以创建一个像素活动,以免看到该活动。

OnePiexlActivity : 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

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM