2017-09-16 3 views
0

저는 C#과 Xamarin의 초보자입니다. 나는이 코드를 가지고 있지만 무엇이 잘못 되었는가를 알지 못한다. 그리드 뷰에 데이터를 표시하지 않는다. GridView에 데이터가 표시되지 않습니다.

내 활동의 코드입니다 :

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

이 하나 axml 파일입니다 :

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

모든 일이 잘 보인다 나는 if 한 Statment에 입력 할 수 있지만, 아무것도에 없다 내 gridview. 누구든지이 코드의 문제점을 알고 있습니다. 미리 감사드립니다.

나는

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

을 사용하려했지만 그들은 나를 위해 작동하지 않았다.

답변

0

List<> 직접 의 GridView에 넣어보십시오 :

tvShows.Add(data1); 

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

이 오류가 발생하면 ** 'System.Collections.Generic.List '형식을 'Android.Widget.IListAdapter'형식으로 암시 적으로 변환 할 수 없습니다. ** @ AT-2017 –

+0

하나 더 시도해보십시오. Chane이 목록 - ** JavaList tvShows = new JavaList (); **. –

+0

코드가 거의 좋아 보인다.이 링크를 방문하여 제공된 도움말이 있는지 확인하십시오. http://www.codeproject.com/Articles/800908/Displaying-Data-with-an-Adapter-in-Xamarin-Android –

0

암시 적 형식을 변환 할 수 없습니다 'System.Collections.Generic.List' 'Android.Widget.IListAdapter'

tvShows의 형식을 JavaList<string>으로 정의 했으므로 tvShows.Add(data1) 메서드를 사용할 때 data1 형식은이어야합니다.. 그러나 data1's 유형은 FoodTable이며 호환되지 않습니다.

tvShows.AddRange(data1); 
: 당신이 tvShows를 나열하는 목록 data1을 추가 할 때

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

, 당신은 List.AddRange 방법을 사용할 수 있습니다 : AT-2017으로

,이 같은 사용이이 문제를 해결할 수 List<>를 사용했다

FoodTable의 데이터를 GridView에 표시하려면 custom adapter :

을 구현하면됩니다.

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

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> 

코드에서 그것을 사용 this 같은

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

효과

GridViewAdapter을 만듭니다.

+0

@ z.r, 문제를 해결 했습니까? –