Xamarin Android - 在 Fragment 中访问 textview onclick

Xamarin Android - Access textview onclick within a Fragment

我正在尝试在单独的 Click 函数中访问作为 Fragment 一部分的 TextView。

public class FragmentHome : AndroidX.Fragment.App.Fragment
    {
        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.fragment_home, container, false);

            // Initialise View's Textviews & TextInput
            TextView genderButton= view.FindViewById<TextView>(Resource.Id.genderButton);
            TextView secondButton = view.FindViewById<TextView>(Resource.Id.secondButton);
            TextInputEditText firstInput = view.FindViewById<TextInputEditText>(Resource.Id.firstInput);

            // set up click actions
            genderButton.Click += GenderButton_Click;

            return view;
        }


        private void GenderButton_Click(object sender, System.EventArgs e)
        {
            if (genderButton.Text == "Male")
            {
                genderButton.Text = "Female";
            }
            else
            {
                genderButton.Text = "Male";
            }
        }
    }

我正在尝试访问 genderButton 的文本,但收到错误消息“名称 'genderButton' 在当前上下文中不存在”。我尝试同时添加

TextView genderButton = FindViewById<TextView>(Resource.Id.genderButton);

View view = inflater.Inflate(Resource.Layout.fragment_home, container, false); TextView genderButton = view.FindViewById<TextView>(Resource.Id.genderButton);

但是第一个的问题是 FindViewById 在当前上下文中不存在,第二个选项显然不起作用,因为它会膨胀一个新的片段,而不是定义上下文对于 genderButton。

有没有一种方法可以正确定义 genderButton 的上下文或使用 Click 事件发送 genderButton 数据?

这是一个基本的 C# 作用域问题。您在 OnCreateView 内部声明 genderButton,因此它仅在 内部 范围内具有该方法。如果你想在代码的其他地方使用它,你需要在 class 级别声明它,而不是在方法内部

TextView genderButton;

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

            // Initialise View's Textviews & TextInput
            genderButton= view.FindViewById<TextView>(Resource.Id.genderButton);
            TextView secondButton = view.FindViewById<TextView>(Resource.Id.secondButton);
            TextInputEditText firstInput = view.FindViewById<TextInputEditText>(Resource.Id.firstInput);

            // set up click actions
            genderButton.Click += GenderButton_Click;

            return view;
        }