我的活动名为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做到?
答案 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>