0

Angenommen, ich habe N-Nummern-Kategorien, die von meinem REST kommen. Ich möchte Tabs für alle diese Kategorien hinzufügen. Mal sehen, z.B. Angenommen, in meiner REST-Antwort haben nur 2 Kategorien, es ist nur zwei Registerkarte erstellen. wenn es 5 Kategorien hat, dann 5 Tabs und so weiter. Und in jeder Kategorie Registerkarte laden Sie eine Liste meiner Artikel für ausgewählte Registerkarte (Kategorie). Derzeit habe ich es mit statischen Daten mit Hilfe von Fragment implementieren. Jedes Fragment verwendet eine Listenansicht zum Laden von Elementen. Aber ich denke, es ist kein richtiger Weg.Hinzufügen von Tabs basierend auf Kategorien in Xamarin.Android

Here is an example

Können Sie mir empfehlen, was soll ich verwenden oder wie kann ich Tab hinzufügen, basierend auf meiner Kategorie und meiner Liste für jede Kategorie laden? Ich habe TabLayout nicht in Xamarin.android gefunden.

Meine Hauptansicht:

<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> 

Hier ist meine Haupttätigkeit:

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); 
     } 

Einer meines Fragment Ausblick:

<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> 

And My Fragment Klasse:

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); 
     } 

Danke

Antwort

0

Can you please suggest me what should I use to or how can I add tab based on my category and load my list for each category? I haven’t found TabLayout in Xamarin.android.

ich nicht die Methode, die Sie falsch verwendet sagen kann, aber wenn man TabLayout in Xamarin.Android verwenden möchten, müssen Sie die Xamarin.Android.Support.Design Paket zusammen mit einigen Paketen wie Xamarin.Android.Support.v4 installieren.

Dann können Sie entwerfen Ihr Layout zum Beispiel wie folgt aus:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <android.support.design.widget.TabLayout 
     android:id="@+id/sliding_tabs" 
     style="@style/TabLayoutThemes" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="?android:attr/colorPrimary" 
     app:tabGravity="fill" 
     app:tabMode="fixed" /> 
    <android.support.v4.view.ViewPager 
     android:id="@+id/viewpager" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 
</LinearLayout> 

Für weitere Informationen können Sie in diesem Tutorial verweisen: Xamarin Android: Working with material design TabLayout and ViewPager.

+0

Vielen Dank für Ihren Vorschlag. Ich habe es versucht, aber das Hauptproblem ist, kann Xamarin.Android.Support.Design Component nicht zu meinem Projekt hinzufügen. Es ist ein Fehler: Konnte das Paket 'Xamarin.Android.Support.Design 26.0.2' nicht installieren. Sie versuchen, dieses Paket in einem Projekt zu installieren, das auf MonoAndroid, Version = v6.0 abzielt, aber das Paket enthält keine Assemblyverweise oder Inhaltsdateien, die mit diesem Framework kompatibel sind. Wenden Sie sich an den Autor des Pakets, um weitere Informationen zu erhalten. Gibt es alternative Möglichkeiten zum Tabbing anstelle von TabLayout? – Russell

+0

@ Russell, was ist die Zielversion Ihres Projekts? –

+0

Kompilieren mit Android-Version (Ziel-Framework) Android 6.0 (Marshmallow) Min Android-Version: Android 5.0 (API-Ebene 21 - Lollipop) – Russell

Verwandte Themen