在片段内部而不是在AppCompatActivity

时间:2016-09-29 23:29:45

标签: android android-fragments xamarin android-viewpager android-tablayout

我有这个布局:

1)带有ToolBar和片段容器的AppCompatActivity

2)一些简单的碎片

3)使用ViewPager

隐藏TabLayout的片段

当我使用应该在选项卡上使用的片段时,片段显示得非常好。

应该在选项卡上的一个片段位于ViewPager中。 这就是我尝试在Fragment中实现TabLayout的方法

带有 TabLayout 的片段和 ViewPager:

public class StaffProfileFragment : Fragment
{
    public override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);

        // Create your fragment here
    }

    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)

    {
        // Use this to return your custom view for this Fragment
        // return inflater.Inflate(Resource.Layout.YourFragment, container, false);
        var view = inflater.Inflate(Resource.Layout.StaffProfilesWithTabs, container, false);

        var fragments = new Fragment[]
{
            new StaffList(),
            new MessagesFragment(),
            new SuggestionsMessagesFragment()
};


        var titles = CharSequence.ArrayFromStringArray(new[]
            {
                "Profile",
                "Thanks",
                "Suggestions"
            });

        var viewPager = view.FindViewById<ViewPager>(Resource.Id.ProfileViewpager);
        viewPager.Adapter = new TabsFragmentPagerAdapter(ChildFragmentManager, fragments, titles);

        //var myActivity = (MainActivity)this.Activity;
        //myActivity.SetActionBarTitle("Select Your Location");

        // Give the TabLayout the ViewPager
        var tabLayout = view.FindViewById<TabLayout>(Resource.Id.SlidingTabsTabLayout);
        tabLayout.SetupWithViewPager(viewPager);

        return view;
    }
}
}

我使用适配器

public class TabsFragmentPagerAdapter : FragmentPagerAdapter
{
    private readonly Fragment[] fragments;

    private readonly ICharSequence[] titles;

    public TabsFragmentPagerAdapter(FragmentManager fm, Fragment[] fragments, ICharSequence[] titles) : base(fm)
    {
        this.fragments = fragments;
        this.titles = titles;
    }
    public override int Count
    {
        get
        {
            return fragments.Length;
        }
    }

    public override Fragment GetItem(int position)
    {
        return fragments[position];
    }

    public override ICharSequence GetPageTitleFormatted(int position)
    {
        return titles[position];
    }
}

(我现在只提供此代码,如果它足以解决问题,否则我会放入xmls和Fragments代码。)

问题是该片段出现但它没有正确加载数据,标签不能被打字,如果我点击某个地方的片段,应用程序崩溃并在调试器中粉碎。

我做错了什么?在片段中实现tablayout是不错的主意吗?也许我应该在AppCompatActivity上实现它并显示/隐藏我想在每个场合使用的元素?

我测试的两个解决方案是:

  1. 使用工具栏和tabhost创建单独的Activity。
  2. 在使用工具栏添加tabhost的活动中,当我想只显示一个片段时,我会使用tabhost并设置可见性消失。
  3. 但我试图了解哪种方法最好, 感谢

0 个答案:

没有答案