Вызов метода из другого класса, который использует переменные вне метода - PullRequest
0 голосов
/ 14 мая 2019

У меня проблема. У меня есть метод в классе, как это:

public void UpdateActionBar(int CurrentFragmentNum)
{
    if (CurrentFragmentNum == 1)
    {
        btnBack.Visibility = ViewStates.Invisible;
        btnNext.Visibility = ViewStates.Invisible;
    }
    else
    {
        btnBack.Visibility = ViewStates.Visible;
        btnNext.Visibility = ViewStates.Visible;
    }

    if (CurrentFragmentNum == 3)
    {
        btnNext.Text = "Finish";
    }
    else
    {
        btnNext.Text = "Next";
    }
}

Теперь в другом классе я вызываю этот метод так:

new ActionBar_Setup().UpdateActionBar(CurrentFragmentNum);

Но, как вы видите, я использую 2 переменные: btnBack и btnNext Эти переменные равны нулю, когда я вызываю метод из другого класса, потому что тогда переменные не определены. Но я не могу переместить строки, которые присваивают значение этим переменным, потому что он использует переменную представления. Вот код, чтобы показать, что я имею в виду:

public class ActionBar_Setup : Android.Support.V4.App.Fragment
{
    Button btnBack;
    Button btnNext;

    public int CurrentFragmentNum = 1;
    public int PreviousFragmentNum = 1;
    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);

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

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

        UpdateActionBar(CurrentFragmentNum);

        return view;
    }

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

    public void btnNext_Click(object sender, EventArgs e)
    {
        if (CurrentFragmentNum < 3)
        {
            PreviousFragmentNum = CurrentFragmentNum;
            CurrentFragmentNum += 1;
            Direction = "Forwards";
            UpdateActionBar(CurrentFragmentNum);
            (Activity as MainActivity)?.ShowFragment(CurrentFragmentNum, PreviousFragmentNum, Direction);
        }
    }

    public void UpdateActionBar(int CurrentFragmentNum)
    {
        if (CurrentFragmentNum == 1)
        {
            btnBack.Visibility = ViewStates.Invisible;
            btnNext.Visibility = ViewStates.Invisible;
        }
        else
        {
            btnBack.Visibility = ViewStates.Visible;
            btnNext.Visibility = ViewStates.Visible;
        }

        if (CurrentFragmentNum == 3)
        {
            btnNext.Text = "Finish";
        }
        else
        {
            btnNext.Text = "Next";
        }
    }
}

Как я могу это исправить, чтобы я мог вызывать функцию в другом классе?

Ответы [ 3 ]

1 голос
/ 14 мая 2019

Вы можете сделать свой ActionBar_Setup синглтон:

public class ActionBar_Setup : Android.Support.V4.App.Fragment
 {

    public static ActionBar_Setup Instance;
    public static ActionBar_Setup NewInstance()
    {
        if (Instance== null)
        {
            Instance= new ActionBar_Setup();

        }

        return Instance;
    }
    ...
}

затем при создании ActionBar_Setup вот так:

ActionBar_Setup fActionBarSetup = ActionBar_Setup.NewInstance();

наконец, вызовите UpdateActionBar метод в другом классе, подобный этому:

ActionBar_Setup.Instance.UpdateActionBar(3);
0 голосов
/ 14 мая 2019

Это множество способов достичь того, что вы хотите, согласно тому, что говорит Ахмед Моавад.Другое возможное решение - добавить в класс поля btnBack и btnNext.Затем присвойте значения полям.Как только вы выполните метод.Вы должны иметь возможность получить поля внутри вызывающего метода.

Я бы сказал, отделить метод UpdateActionBar от действий формы.Таким образом, у вас будет UpdateActionBar в отдельном классе, как и у вас.Но ваши поля btnBack и btnNext, вероятно, должны называться как-то иначе.Затем в вызывающем методе присвойте результаты ваших полей btnNext и btnBack.

0 голосов
/ 14 мая 2019

вы можете передавать параметры событиям вашей кнопки из представления в виде значений GET или POST для кнопки и назначать значения своему методу непосредственно из представлений

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...