2013-05-08 77 views
0

我想在GridView中顯示自己的自定義視圖。我試過這個代碼:GridView中的自定義視圖

GridView gv= (GridView) rootView.findViewById(R.id.TerminGrid); 
Cursor cr = db.rawQuery(DatenbankManager.GET_TERMINE, null); 

ArrayAdapter<Termin> adapter = new ArrayAdapter<Termin>(getActivity(), android.R.layout.simple_list_item_1); 
gv.setAdapter(adapter); 

for(cr.moveToFirst(); !cr.isAfterLast(); cr.moveToNext()) 
{ 
    String titel  = cr.getString(cr.getColumnIndex("Titel")); 
    String datumString = cr.getString(cr.getColumnIndex("Datum")); 

    DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm", Locale.getDefault()); 
    Date datum = null; try { datum = df.parse(datumString); } catch (ParseException e) { }  

    Termin t = new Termin(getActivity(), db, titel, datum); 
    adapter.add(t); 
} 

但是當我運行這段代碼時,GridView中只顯示了幾個字符串。我真的不得不爲此創建自己的GridViewAdapter嗎?我認爲這是一個正常的瀏覽,我可以用上面的代碼diplay這...這是我的課:

public class Termin extends LinearLayout implements OnClickListener 
{ 
    public static final int LAYOUT = R.layout.termin_item; 

    private Context context; 
    private SQLiteDatabase db; 

    private String titel; 
    private Date datum; 

    public Termin(Context c) 
    { 
      super(c); 
      this.context = c; 
    } 

    public Termin(Context c, SQLiteDatabase db, String titel, Date datum) 
    { 
      super(c); 

      this.context = c; 
      this.db = db; 

      LayoutInflater.from(c).inflate(R.layout.termin_item, this, true); 

      this.setTitel(titel); 
      this.setDatum(datum); 
    } 
} 

而對於項目的佈局:

<merge xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" > 
<LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     android:paddingBottom="@dimen/PaddingBottom" 
     android:paddingLeft="@dimen/PaddingHorizontal" 
     android:paddingRight="@dimen/PaddingHorizontal" 
     android:paddingTop="@dimen/PaddingTop" > 

     <TextView 
      android:id="@+id/Titel" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginBottom="@dimen/MarginTop" 
      android:text="" 
      android:textAppearance="?android:attr/textAppearanceMedium" 
      android:textStyle="bold" /> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content"> 

      <TextView 
       android:id="@+id/Datum" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_marginRight="@dimen/MarginTop" 
       android:text="" /> 

      <TextView 
       android:id="@+id/Uhrzeit" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:gravity="right" 
       android:text="" /> 

     </LinearLayout> 
</LinearLayout> 
</merge> 

我只想顯示這些項目在我的GridView中。關鍵是我認爲這些物品已準備好顯示,但我不能撥打GridView.addView(...) direclty。項目的佈局被加載到構造器中,並且所有的TextView等都被設置在get和set Methods中。如何在不創建自己的ListAdapter的情況下顯示這些項目 - 在我看來,ListAdapter是不必要的和內存浪費。

回答

1

我怎麼能不創建自己的ListAdapter

顯示此項目不能,則默認適配器知道如何將數據綁定到標準的意見數量有限(基本TextViewsImageViews) ,它不知道如何處理您的自定義視圖。

......在我看來,ListAdapter是不必要的和內存浪費。

那麼你的GridView需要一個適配器,並在那個適配器,你基本上會做它通常做的事情,所以應該沒有任何問題。我不明白你爲什麼如此反對定製適配器,所以很容易實現它。

另一種方法是把titeldatum變量輸入Map(我不知道你的數據庫引用做什麼),並在該ListMap。該列表將隨後使用SimpleAdapter以及SimpleAdapter.ViewBinder來手動綁定數據。我只想創建自定義適配器,這是一個更清潔的解決方案。