sam*_*mis 0 android xamarin.android android-lifecycle android-fragments android-activity
简而言之,我正在尝试将一个片段包装在一个包装类中,然后将包装器添加到视图寻呼机中.我在以后运行应用程序时遇到空指针问题(而不是从片段继承,并将继承的片段添加到viewpager).
描述
基本上,我正在向viewpager添加片段,在添加片段之前,我一直在继承它,并将其包装在另一个视图中,在它周围添加一个边界(页面分割).
每个页面/片段都是一个不同的类,表示要显示的视图.
这种方法的问题是我需要扩展每个片段并添加相同的样板功能,这是不理想的.我也不想创建一个基类,比如说"boardered-fragment",因为当它们从它衍生出来时(然后片段)就会知道它们(我认为).
所以,我想我也许只会使用组合,我将创建一个通用的包装类,它将包含一个类型为T的片段数据成员.这个问题是我似乎无法获得当前活动的"活动" "引用片段数据成员的上下文(在包装器中组成).
我做了一些临时调整并隐藏了getActivity(),它返回了我手动存储的活动引用的副本.然而程序崩溃是随机的(我怀疑它会).我已经尝试在我的包装器中覆盖所有可能的生命周期方法,然后在内部将在数据成员片段上调用该生命周期方法
public override void OnSomething()
{
base.OnSomething()
mFragment.OnSomething()
}
Run Code Online (Sandbox Code Playgroud)
但这似乎没有帮助.我猜测因为组合片段是从当前活动上下文"隐藏"的,所以我需要手动完成所有必要的操作.我只是不确定它们都是什么?
这是我正在尝试完成的快速代码示例,详细说明如下.如果需要更多代码,请告诉我,我将调整我的示例格式.
组合(在整个app中有很多问题/空指针)
public class Frag1 : Fragment
{
...
}
public class Activity1 : Activity
{
public override void OnCreate(Bundle bundle)
{
...
List<Fragment> fragments = new List<Fragment>();
fragments.Add(FragmentWrapper.NewInstance(Activity, typeof(FragmentWrapper))
MyAdapter pagerAdapter = new MyAdapter(FragmentManager, fragments);
ViewPager viewPager = FindViewById<ViewPager>(Resource.Id.view_pager);
viewPager.Adapter = pagerAdapter;
}
public class FragmentWrapper
{
Fragment mFragment; // How to successfully wrap a fragment, but still behave properly ????
public static FragmentWrapper NewInstance(Activity activity, string type)
{
FragmentWrapper thisFrag = new FragmentWrapper();
...
thisFrag.mFragment = Fragment.Instantiate(activity, type);
return thisFrag;
}
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle bundle)
{
// add boarder around mFragment and return new view
}
}
public class MyAdapter : Android.Support.V13.App.FragmentStatePagerAdapter
{
....
}
}
Run Code Online (Sandbox Code Playgroud)
继承(可以,好的)
public class Frag1 : Fragment
{
...
}
public class Activity1 : Activity
{
public override void OnCreate(Bundle bundle)
{
...
List<Fragment> fragments = new List<Fragment>();
fragments.Add(FragmentExtender.NewInstance(Activity, typeof(FragmentExtender))
MyAdapter pagerAdapter = new MyAdapter(FragmentManager, fragments);
ViewPager viewPager = FindViewById<ViewPager>(Resource.Id.view_pager);
viewPager.Adapter = pagerAdapter;
}
public class FragmentExtender : Frag1
{
public static FragmentExtender NewInstance()
{
FragmentExtender thisFrag = new FragmentExtender();
...
return thisFrag;
}
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle bundle)
{
// add boarder around mFragment and return new view
}
}
public class MyAdapter : Android.Support.V13.App.FragmentStatePagerAdapter
{
....
}
}
Run Code Online (Sandbox Code Playgroud)
对此有任何帮助非常感谢.谢谢.
| 归档时间: |
|
| 查看次数: |
1428 次 |
| 最近记录: |