使用片段的Xamarin.Android应用程序,如何在片段内的窗口小部件上绑定处理程序

问题描述 投票:0回答:1

我的应用程序使用底部导航,是3个选项卡。片段在supportFragmentManager启动时创建。向用户显示第一个片段(标签)。我想在第三个片段(第三个选项卡)上的按钮上挂钩按钮处理程序。

该应用只有一项活动。从这个活动开始,在OnCreate方法中,在创建了3个片段之后,我打电话给

myButton= FindViewById<Button>(Resource.Id.theButton);

代码运行,但由于myButton始终为null,我无法将处理程序挂钩!就像UI尚未为此片段做好准备一样,因为它正在显示当前的第一个片段。

还有另一个我可以挂钩处理程序的事件吗?我不能在片段的代码中添加处理程序表单。总是得到一个空!

android-fragments xamarin xamarin.android
1个回答
0
投票

由于我从头开始试图找出问题的测试项目,我没有过度使用复制粘贴以获得新的解决方案。奇怪的是,该测试解决方案正在运行。很惊讶?不是我猜的!

但是为了向任何可能遇到同样问题的人解释我做过实验,这里症状是什么以及我如何解决它。

当我在片段的OnCreateView方法中使用视图时,如下所示:

public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        var ignored = base.OnCreateView(inflater, container, savedInstanceState);

        var view = inflater.Inflate(Resource.Layout.fragment_options, null);

        myButton = (Button)view.FindViewById(Resource.Id.Button1);
        myButton.SetOnClickListener(this);
        return view;
    }

view.FindViewById总是返回Null,即使在intellisense中,“Resource.Id.Button1”就在那里并自动完成!

事实证明,Button1在片段的布局文件中定义如下

<Button id="@+id/Button1" 
    android:layout_width = "match_parent" 
    android:layout_height = "wrap_content" 
    android:text ="Test"
/>

而不是

<Button android:id="@+id/Button1" 
    android:layout_width = "match_parent" 
    android:layout_height = "wrap_content" 
    android:text ="Test"
/>

本来应该的。一个正确命名的“id”属性!

最终结果是“Button1”确实在资源文件中,因此“intellicompleted”但没有正确命名空间!而且,是的,有编译器警告我应该更仔细地查看。警告确实让我了解了这个问题。

键盘背后的问题就在于此!希望这个解释能像我一样对任何人有所帮助!

© www.soinside.com 2019 - 2024. All rights reserved.