根据Xamarin.Android中的类别添加选项卡

时间:2017-10-22 06:13:12

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

假设我有来自我的REST的N个数字类别。我想为所有这些类别添加标签。让我们看看,例如假设在我的REST响应中只有2个类别,它只创建了两个选项卡。如果它有5个类别,那么5个标签,依此类推。 在每个类别选项卡中,为选定的选项卡(类别)加载我的项目列表。 目前我已经使用片段实现了静态数据。每个片段使用列表视图来加载项目。但我认为这不是一种正确的方式。

Here is an example

您能否建议我应该使用什么?如何根据我的类别添加标签并加载每个类别的列表?我没有在Xamarin.android中找到TabLayout。

我的主要观点:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:minWidth="25px"
    android:minHeight="25px">

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/fragmentContainer" />
</LinearLayout>

这是我的主要活动:

protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);

            // Create your application here
            SetContentView(Resource.Layout.MainView);              


            ActionBar.NavigationMode = ActionBarNavigationMode.Tabs;

            AddTab(" Favorite", Resource.Drawable.FavoritesIcon, new FavoriteItemFragment());
            AddTab(" Ice", Resource.Drawable.IceCreamIcon, new IceCreamFragment());
            AddTab(" Shushi", Resource.Drawable.SushiIcon, new ShushiFragment());
            AddTab(" Burger", Resource.Drawable.VeggieLoversIcon, new BurgerFragment());
            AddTab(" Biriyani", Resource.Drawable.BiriyaniIcon, new BiriyaniFragment());
            AddTab(" Pasta", Resource.Drawable.PastaIcon, new PastaFragment());
            AddTab(" Pizza", Resource.Drawable.PizzaIcon, new PizzaFragment());
            AddTab(" Sandwich", Resource.Drawable.SandwichIcon, new SandwichFragment());
            AddTab(" Coffee", Resource.Drawable.CoffeeIcon, new CoffeeFragment());



            //no_of_categories = allCategories.Count;   

        }

        private void AddTab(string tabText, int iconResourceId, Fragment view)
        {
            var tab = this.ActionBar.NewTab();
            tab.SetText(tabText);
            tab.SetIcon(iconResourceId);


            tab.TabSelected += delegate (object sender, ActionBar.TabEventArgs e)
            {
                var fragment = this.FragmentManager.FindFragmentById(Resource.Id.fragmentContainer);

                if (fragment != null)
                {
                    e.FragmentTransaction.Remove(fragment);
                }
                e.FragmentTransaction.Add(Resource.Id.fragmentContainer, view);
            };

            tab.TabUnselected += delegate (object sender, ActionBar.TabEventArgs e)
            {
                e.FragmentTransaction.Remove(view);
            };
            this.ActionBar.AddTab(tab);
        }

我的片段视图之一:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:minWidth="25px"
    android:background="#FCD972"
    android:minHeight="25px">
  <ListView
        android:minWidth="25px"
        android:minHeight="25px"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/itemListView" />
</LinearLayout>

和我的片段类:

public override void OnActivityCreated(Bundle savedInstanceState)
        {
            base.OnActivityCreated(savedInstanceState);
            FindViews();
            HandleEvents();

            items = itemDataService.GetItemsForCategory(4);

            listView.Adapter = new ItemListAdapter(this.Activity, items);
        }

        public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
        {
            return inflater.Inflate(Resource.Layout.MyFragment, container, false);
        }

谢谢

1 个答案:

答案 0 :(得分:0)

  

您能否建议我应该使用什么?如何根据我的类别添加标签并加载每个类别的列表?我没有在Xamarin.android中找到TabLayout。

我不能说你使用的方法是错误的,但是如果你想在Xamarin.Android中使用TabLayout,你需要安装Xamarin.Android.Support.Design包和一些包{} {1}}。

然后你可以设计你的布局,例如:

Xamarin.Android.Support.v4

有关详细信息,请参阅本教程:Xamarin Android: Working with material design TabLayout and ViewPager