2017-09-16 1 views
0

Ich bin ein Anfänger in C# und Xamarin. Ich habe diesen Code, aber ich weiß nicht, was falsch ist, das zeigt keine Daten in Gridview.GridView zeigt keine Daten an

Dies ist der Code meiner Tätigkeit:

public class MenuFoodActivity : Activity 
{ 
string dpPath = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), "HotelDb.db3"); 

GridView gv; 
ArrayAdapter adapter; 
JavaList<String> tvShows = new JavaList<string>(); 


protected override void OnCreate(Bundle savedInstanceState) 
{ 
    base.OnCreate(savedInstanceState); 
    SetContentView(Resource.Layout.MenuFood); 
    gv = FindViewById<GridView>(Resource.Id.gridViewMenu); 
    adapter = new ArrayAdapter(this, Android.Resource.Layout.SimpleListItem1, tvShows);    
    Retrieve(); 

} 
private void Retrieve() 
{ 
    var db = new SQLiteConnection(dpPath); 
    var data = db.Table<FoodTable>(); 
    var data1 = (from values in data 
       select new FoodTable 
       { 
        Shenase = values.Shenase, 
        Types = values.Types, 
        Names = values.Names, 
        Costs = values.Costs 

       }).ToList<FoodTable>(); 

    tvShows.Add(data1); 
    if (tvShows.Size() > 0) 
    { 
     gv.Adapter = adapter; 
    } 
    else 
    { 

     Toast.MakeText(this, "not found.", ToastLength.Short).Show(); 
    } 
} 
} 

und dieses ist für axml Datei:

<GridView 
android:minWidth="25px" 
android:minHeight="25px" 
android:layout_width="wrap_content" 
android:layout_height="200dip" 
android:id="@+id/gridViewMenu" 
android:background="#aaa" 
android:layout_marginTop="10dip" /> 

alles scheint in Ordnung, und ich kann auf die if statment eingeben, aber es gibt nichts in meine Gridview. Weiß jemand, was das Problem mit diesem Code ist? Danke im Voraus.

habe ich versucht,

List<FoodTable> tvShows = new List<FoodTable>(); 
JavaList<FoodTable> tvShows = new JavaList<FoodTable>(); 
JavaList<String> tvShows = new JavaList<String>(); 

aber sie arbeiten nicht für mich zu verwenden.

Antwort

0

Versuchen die List<> im Gridview setzen direkt:

tvShows.Add(data1); 

if (tvShows.Size() > 0) 
{ 
    gv.Adapter = tvShows; 
} 
+0

Dies verursacht einen Fehler ** kann nicht implizit Typ 'System.Collections.Generic.List ' zu 'Android.Widget.IListAdapter' ** @ AT-2017 –

+0

Versuchen Sie noch eine Sache. Chane die Liste dazu - ** JavaList tvShows = neue JavaList (); **. –

+0

Ihr Code sieht fast ok aus.Bitte besuchen Sie diesen Link und sehen, ob Hilfe zur Verfügung gestellt - http://www.codeproject.com/Articles/800908/Displaying-Data-with-an-Adapter-in-Xamarin-Android –

0

kann nicht implizit Typ umwandeln 'System.Collections.Generic.List' auf 'Android.Widget.IListAdapter'

Sie haben den Typ tvShows als JavaList<string> definiert. Wenn Sie also die Methode tvShows.Add(data1) verwenden, sollte der Typ data1lauten. Aber Ihr data1's Typ ist FoodTable, sie sind inkompatibel.

Wie AT-2017 sagte List<> verwenden dieses Problem lösen, Nutzung wie folgt aus:

//Change the type form string to FoodTable 
List<FoodTable> tvShows = new List<FoodTable>(); 

Wenn Sie eine Ihrer Liste hinzufügen data1tvShows aufzulisten, Sie List.AddRange Methode verwenden:

tvShows.AddRange(data1); 

Wenn Sie die Daten Ihrer FoodTable in einer GridView anzeigen möchten, können Sie eine custom adapter:

implementieren

erstellen GridViewAdapter:

public class GridViewAdapter : BaseAdapter<FoodTable> 
{ 
    private MainActivity mContext; 
    private List<FoodTable> tvShows; 

    public GridViewAdapter(MainActivity context, List<FoodTable> tvShows) 
    { 
     this.mContext = context; 
     this.tvShows = tvShows; 
    } 

    public override FoodTable this[int position] 
    { 
     get { return tvShows[position]; } 
    } 

    public override int Count => tvShows.Count; 

    public override long GetItemId(int position) 
    { 
     return position; 
    } 

    public override View GetView(int position, View convertView, ViewGroup parent) 
    { 
     FoodTable item = tvShows[position]; 

     View view = convertView; // re-use an existing view, if one is available 
     if (view == null) 
      view = mContext.LayoutInflater.Inflate(Resource.Layout.item, null); 

     view.FindViewById<TextView>(Resource.Id.Shenase).Text = item.Types; 
     view.FindViewById<TextView>(Resource.Id.Types).Text = item.Types; 
     view.FindViewById<TextView>(Resource.Id.Names).Text = item.Names; 
     view.FindViewById<TextView>(Resource.Id.Costs).Text = item.Costs; 

     return view; 
    } 
} 

Die item.axml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="40dp" 
    android:orientation="horizontal" 
    android:padding="8dp" 
    > 

<TextView 
    android:layout_width="0dp" 
    android:layout_height="wrap_content" 
    android:id="@+id/Shenase" 
    android:layout_weight="1"/> 
<TextView 
    android:layout_width="0dp" 
    android:layout_height="wrap_content" 
    android:id="@+id/Types" 
    android:layout_weight="1" /> 
<TextView 
    android:layout_width="0dp" 
    android:layout_height="wrap_content" 
    android:id="@+id/Names" 
    android:layout_weight="1" /> 
<TextView 
    android:layout_width="0dp" 
    android:layout_height="wrap_content" 
    android:id="@+id/Costs" 
    android:layout_weight="1" /> 

</LinearLayout> 

es in Ihrem Code verwenden:

adapter = new GridViewAdapter(this, tvShows);// not use ArrayAdapter 

Wirkung wie this.

+0

@ z.r, haben Sie Ihr Problem gelöst? –