我(尽管仍然有限,因为我刚刚开始)对Fragments的理解是它们与 WPF 中的用户控件有些相似 - 并且因为我打算重用某些 GUI 元素,将它们放入活动似乎会导致许多重复的代码。
因此,根据文档中的片段示例,我尝试自己制作。
public class MyFragment: Fragment
{
public override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
}
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
if (container == null)
{
Log.Debug("SmartApp", "Dialer Fragment is in a view without container");
return null;
}
input = container.FindViewById<EditText>(Resource.Id.editText1);
//do some stuff like assigning event handlers, etc.
return base.OnCreateView(inflater, container, savedInstanceState);
}
}
应该托管此片段的活动:
[Activity(Label = "My Activity")]
public class TestActivity: Activity
{
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.my_layout);
}
}
最后是此活动的布局定义
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<fragment class="MonoDevelopTest.MyFragment"
android:id="@+id/titles_fragment"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</LinearLayout>
当我调试这个时,我在InflateException
(MyActivity.OnCreate
行)中得到SetContentView
。所以,我没有做正确的事情 - 为活动加载我想要的布局并在其中托管我的片段的正确方法是什么?
@edit:Aargh - 正如经常发生的那样,写下问题会给你一些新的想法。我不是很远 - 我的错误是。我必须改变的是将其添加为MyFragment.OnCreateView:
View fragment = inflater.Inflate(Resource.Layout.dialer, null);
然后我不得不在片段上搜索我的控件,而不是容器(它仍为空)。
我唯一不明白的是为什么在 Xamarin 样本中他们检查container == null
中的DetailsFragment.OnCreateView
(这是我走错了路线的原因)最初)。
答案 0 :(得分:0)
所有我必须改变的是在MyFragment.OnCreateView中将其添加为第一行:
View fragment = inflater.Inflate(Resource.Layout.dialer, null);
然后我不得不在片段上搜索我的控件,而不是容器。我仍然不太明白为什么在官方样本中他们在OnCreateView中检查容器为null - 但是现在我只涉及手机,而不是桌子,所以我只有一个布局。