0

我想在 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 吗?我认为这是一个普通的视图,我可以用上面的代码显示它......这是我的班级:

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(...)。项目的布局在构造函数中加载,所有的 TextView 等都在 get 和 set 方法中设置。如何在不创建自己的 ListAdapter 的情况下显示这些项目 - 在我看来 ListAdapter 是不必要的,而且会浪费内存。

4

1 回答 1

1

如何在不创建自己的 ListAdapter 的情况下显示这些项目

您不能,默认适配器知道如何将数据绑定到有限数量的标准视图(基本上TextViews, ImageViews),它不知道如何处理您的自定义视图。

...在我看来, ListAdapter 是不必要的,而且会浪费内存。

那么你GridView需要一个适配器,在那个适配器中你基本上会做它通常做的事情,所以不应该有任何问题。我不明白您为什么如此反对自定义适配器,它很容易实现。

另一种方法是将titelanddatum变量放入 a Map(我不知道您对数据库引用做了什么)MapList. 然后该列表将与 aSimpleAdapter一起使用SimpleAdapter.ViewBinder以手动绑定数据。我只想创建自定义适配器,这是一个更清洁的解决方案。

于 2013-05-09T04:24:38.713 回答