2013-05-08 51 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来手动绑定数据。我只想创建自定义适配器,这是一个更清洁的解决方案。