C# 从其他类调用函数时获取空值

C# 从其他类调用函数时获取空值,c#,android-fragments,xamarin.android,C#,Android Fragments,Xamarin.android,我有个问题。。。我有两个框架布局,第一个是可以更改的操作栏,第二个是可以更改的屏幕布局。现在我创建了我的主要活动,如下所示: public class MainActivity : FragmentActivity { Dictionary<string, TriangleRegistryObject> TriangleRegistry = new Dictionary<string, TriangleRegistryObject>(); //ALL F

我有个问题。。。我有两个框架布局,第一个是可以更改的操作栏,第二个是可以更改的屏幕布局。现在我创建了我的主要活动,如下所示:

public class MainActivity : FragmentActivity
{
    Dictionary<string, TriangleRegistryObject> TriangleRegistry = new Dictionary<string, TriangleRegistryObject>();

    //ALL FRAGMENTS
    public Android.Support.V4.App.Fragment fragment;
    public Android.Support.V4.App.Fragment PreviousFragment;
    public Android.Support.V4.App.Fragment CurrentFragment;
    public int CurrentFragmentNum;
    public int PreviousFragmentNum;

    //ACTIONBARS
    public ActionBar_Setup actionBar_Setup;
    public ActionBar_Default actionBar_Default;
    //LAYOUTS
    public Intro_Add_Project IntroAddProject;
    public Shape_Selection ShapeSelectionFragment;
    public Shape_Formation ShapeFormationFragment;

    private string Direction;

    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        SetContentView(Resource.Layout.activity_main);

        actionBar_Setup = new ActionBar_Setup();
        actionBar_Default = new ActionBar_Default();
        IntroAddProject = new Intro_Add_Project();
        ShapeSelectionFragment = new Shape_Selection();
        ShapeFormationFragment = new Shape_Formation();

        var TransActionBar = SupportFragmentManager.BeginTransaction();
        TransActionBar.Add(Resource.Id.ActionBarContainer, actionBar_Setup, "ActionBar_Setup");
        TransActionBar.Add(Resource.Id.ActionBarContainer, actionBar_Default, "ActionBar_Default");
        TransActionBar.Hide(actionBar_Default);
        TransActionBar.Commit();

        var TransLayout = SupportFragmentManager.BeginTransaction();
        TransLayout.Add(Resource.Id.LayoutContainer, IntroAddProject, "Intro_Add_Project");
        TransLayout.Add(Resource.Id.LayoutContainer, ShapeFormationFragment, "Shape_Formation");
        TransLayout.Hide(ShapeFormationFragment);
        TransLayout.Add(Resource.Id.LayoutContainer, ShapeSelectionFragment, "Shape_Selection");
        TransLayout.Hide(ShapeSelectionFragment);
        TransLayout.Commit();

        CurrentFragmentNum = 1;
        Direction = "Startup";
        ShowFragment(CurrentFragmentNum, 1, Direction);
    }

    public void ShowFragment (int CurrentFragmentNum, int PreviousFragmentNum, string Direction)
    {
        switch (CurrentFragmentNum)
        {
            case 1:
                fragment = IntroAddProject;
                break;
            case 2:
                fragment = ShapeSelectionFragment;
                break;
            case 3:
                fragment = ShapeFormationFragment;
                break;
        }

        switch (PreviousFragmentNum)
        {
            case 1:
                PreviousFragment = IntroAddProject;
                break;
            case 2:
                PreviousFragment = ShapeSelectionFragment;
                break;
            case 3:
                PreviousFragment = ShapeFormationFragment;
                break;
        }


        var TransLayout = SupportFragmentManager.BeginTransaction();

        switch (Direction)
        {
            case "Forwards":
                TransLayout.SetCustomAnimations(Resource.Animation.slide_in_right, Resource.Animation.slide_out_left);
                break;
            case "Backwards":
                TransLayout.SetCustomAnimations(Resource.Animation.slide_in_left, Resource.Animation.slide_out_right);
                break;
        }

        TransLayout.Hide(PreviousFragment);
        TransLayout.Show(fragment);
        TransLayout.Commit();

        CurrentFragment = fragment;

        if(CurrentFragmentNum != 4)
        {
            var TransActionBar = SupportFragmentManager.BeginTransaction();
            TransActionBar.Hide(actionBar_Default);
            TransActionBar.Show(actionBar_Setup);
            TransActionBar.Commit();
        }
        else
        {
            var TransActionBar = SupportFragmentManager.BeginTransaction();
            TransActionBar.Hide(actionBar_Setup);
            TransActionBar.Show(actionBar_Default);
            TransActionBar.Commit();
        }
    }
}
(Activity as MainActivity)?.ShowFragment(CurrentFragmentNum, PreviousFragmentNum, Direction);
公共类主活动:碎片活动
{
Dictionary TrianglerRegistry=新字典();
//所有碎片
公共Android.Support.V4.App.Fragment片段;
public Android.Support.V4.App.Fragment-PreviousFragment;
public Android.Support.V4.App.Fragment CurrentFragment;
公共int CurrentFragmentNum;
公共int-PreviousFragmentNum;
//动作条
公共操作栏设置操作栏设置;
公共操作栏\默认操作栏\默认;
//布局
公共介绍项目介绍项目;
公共形状_选择形状选择片段;
公共形态形态形态碎片;
私有字符串方向;
创建时受保护的覆盖无效(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.activity_main);
actionBar_设置=新建actionBar_设置();
actionBar_Default=新的actionBar_Default();
IntroAddProject=新的Intro_Add_项目();
ShapeSelectionFragment=新形状_选择();
ShapeFormationFragment=新形状_形();
var TransActionBar=SupportFragmentManager.BeginTransaction();
添加(Resource.Id.ActionBarContainer,actionBar_设置,“actionBar_设置”);
添加(Resource.Id.ActionBarContainer,actionBar_默认值,“actionBar_默认值”);
TransActionBar.Hide(actionBar\u默认值);
TransActionBar.Commit();
var TransLayout=SupportFragmentManager.BeginTransaction();
TransLayout.Add(Resource.Id.LayoutContainer,IntroAddProject,“Intro_Add_项目”);
TransLayout.Add(Resource.Id.LayoutContainer,ShapeFormationFragment,“Shape_Formation”);
隐藏(形状变形片段);
TransLayout.Add(Resource.Id.LayoutContainer,shapeselection片段,“Shape_Selection”);
隐藏(形状选择片段);
TransLayout.Commit();
CurrentFragmentNum=1;
方向=“启动”;
ShowFragment(CurrentFragmentNum,1,方向);
}
public void ShowFragment(int CurrentFragmentNum、int PreviousFragmentNum、字符串方向)
{
开关(CurrentFragmentNum)
{
案例1:
fragment=IntroAddProject;
打破
案例2:
片段=形状选择片段;
打破
案例3:
片段=形状变形片段;
打破
}
开关(PreviousFragmentNum)
{
案例1:
PreviousFragment=IntroAddProject;
打破
案例2:
PreviousFragment=形状选择片段;
打破
案例3:
PreviousFragment=ShapeFormationFragment;
打破
}
var TransLayout=SupportFragmentManager.BeginTransaction();
开关(方向)
{
“远期”一案:
TransLayout.SetCustomAnimations(Resource.Animation.slide\u in\u right,Resource.Animation.slide\u out\u left);
打破
案例“向后”:
TransLayout.SetCustomAnimations(Resource.Animation.slide\u in\u left,Resource.Animation.slide\u out\u right);
打破
}
隐藏(先前片段);
显示(片段);
TransLayout.Commit();
CurrentFragment=片段;
如果(CurrentFragmentNum!=4)
{
var TransActionBar=SupportFragmentManager.BeginTransaction();
TransActionBar.Hide(actionBar\u默认值);
TransActionBar.Show(actionBar\u设置);
TransActionBar.Commit();
}
其他的
{
var TransActionBar=SupportFragmentManager.BeginTransaction();
TransActionBar.Hide(actionBar\u设置);
TransActionBar.Show(actionBar\u默认值);
TransActionBar.Commit();
}
}
}
我还创建了一个ActionBar_Setup.cs。以下是该片段的代码:

public class ActionBar_Setup : Android.Support.V4.App.Fragment
{
    MainActivity mainActivity = new MainActivity();

    public int CurrentFragmentNum;
    public int PreviousFragmentNum;

    public string Direction;

    public override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
    }

    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        View view = inflater.Inflate(Resource.Layout.setup_nav_bar, container, false);

        CurrentFragmentNum = 1;
        PreviousFragmentNum = 1;

        Button btnBack = view.FindViewById<Button>(Resource.Id.btnBack);
        Button btnNext = view.FindViewById<Button>(Resource.Id.btnNext);

        btnBack.Click += btnBack_Click;
        btnNext.Click += btnNext_Click;

        return view;
    }

    public void btnBack_Click(object sender, EventArgs e)
    {
        if (CurrentFragmentNum > 1)
        {
            PreviousFragmentNum = CurrentFragmentNum;
            CurrentFragmentNum -= 1;
            Direction = "Backwards";
            mainActivity.ShowFragment(CurrentFragmentNum, PreviousFragmentNum, Direction);
        }
    }

    public void btnNext_Click(object sender, EventArgs e)
    {
        if (CurrentFragmentNum < 3)
        {
            PreviousFragmentNum = CurrentFragmentNum;
            CurrentFragmentNum += 1;
            Direction = "Forwards";
            mainActivity.ShowFragment(CurrentFragmentNum, PreviousFragmentNum, Direction);
        }
    }
}
公共类ActionBar\u设置:Android.Support.V4.App.Fragment
{
MainActivity MainActivity=新的MainActivity();
公共int CurrentFragmentNum;
公共int-PreviousFragmentNum;
公共字符串方向;
创建时公共覆盖无效(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
}
创建视图上的公共覆盖视图(布局、充气机、视图组容器、捆绑包保存状态)
{
视图=充气机。充气(Resource.Layout.setup\u导航栏,容器,false);
CurrentFragmentNum=1;
PreviousFragmentNum=1;
按钮btnBack=view.findviewbyd(Resource.Id.btnBack);
按钮btnNext=view.FindViewById(Resource.Id.btnNext);
btnBack.Click+=btnBack\u Click;
btnNext.Click+=btnNext\u Click;
返回视图;
}
公共无效btnBack\u单击(对象发送者,事件参数e)
{
如果(CurrentFragmentNum>1)
{
PreviousFragmentNum=当前FragmentNum;
CurrentFragmentNum-=1;
方向=“向后”;
ShowFragment(CurrentFragmentNum、PreviousFragmentNum、Direction);
}
}
public void b单击下一步(对象发送者,事件参数e)
{
如果(CurrentFragmentNum<3)
{
PreviousFragmentNum=当前FragmentNum;
CurrentFragmentNum+=1;
方向=“向前”;
ShowFragment(CurrentFragmentNum、PreviousFragmentNum、Direction);
}
}
}
现在,当我单击Next按钮时,它将从我的MainActivity调用ShowFragment()。那很好