我在哪里指定使用自定义适配器在listView中的哪些值?

时间:2012-12-18 12:02:17

标签: android android-layout listview

我正在android中开发一个简单的应用程序。我有一个类别列表(现在),我想显示为列表,然后(但这很远)点击,启动另一个带有一些功能的活动......好吧,情况:

我的single_list_item.xml:

<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content">
  <!-- Name Label -->
  <TextView android:id="@+id/category_label"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"           
            android:textStyle="bold"
            android:paddingTop="10dip"
            android:paddingBottom="10dip"
            android:textColor="#43bd00"/>
  <!-- Description Label -->

</LinearLayout>

在这里的主要活动是我调用适配器和布局:

List<categorie> values = datasource.getAllCategorie();

        // Use the SimpleCursorAdapter to show the
        // elements in a ListView
        ArrayAdapter<categorie> adapter = new ArrayAdapter<categorie>(this,
            R.layout.single_list_item, values);
        setListAdapter(adapter);

在这里的数据源中我声明了getAllCategorie:

public List<categorie> getAllCategorie() {
            List<categorie> categorie = new ArrayList<categorie>();

            Cursor cursor = database.query(MySQLiteHelper.TABLE_CATEGORIE,
                allCategorieColumns, null, null, null, null, null);

            cursor.moveToFirst();
            while (!cursor.isAfterLast()) {
              categorie categoria = cursorToCategorie(cursor);
              categorie.add(categoria);
              cursor.moveToNext();
            }
            // Make sure to close the cursor
            cursor.close();
            return categorie;
          }

最后是categorie.class:

public class categorie {
      private long id;
      private String nome;
      private long preferita;

      public long getId() {
        return id;
      }

      public void setId(long id) {
        this.id = id;
      }

      public String getNome() {
        return nome;
      }

      public void setNome(String nome) {
        this.nome = nome;
      }



      public long getPreferita() {
        return preferita;
    }

    public void setPreferita(long preferita) {
        this.preferita = preferita;
    }

    // Will be used by the ArrayAdapter in the ListView
      @Override
      public String toString() {
        return nome;
      }
    } 

目前,如果我运行应用程序,它会在启动列表视图时冻结,它会使其完全为空。我想指定放置每个类别元素的位置,例如名称或id,或者是否为“喜欢”(在类别类中获取并设置Preferita)。

当我开始时,适配器部分是:

ArrayAdapter<categorie> adapter = new ArrayAdapter<categorie>(this,
            android.R.layout.simple_list_item_1, values);
        setListAdapter(adapter);

一切都神奇地好了......为什么使用默认布局好?再次,我在哪里指定哪里去了?

提前感谢。

1 个答案:

答案 0 :(得分:1)

当您想要实施简单列表时,使用股票ArrayAdapter没有问题。 Android会查看您提供给适配器的对象,在这些对象上调用toString(),并使用TextView填充id=@android:id/text1 String。它起作用了#34;神奇地&#34;使用android.R.layout.simple_list_item_1时,因为该布局包含TextView id=@android:id/text1

如果您希望更好地控制ListView中每行的布局,可以使用SimpleAdapter,以便将值映射到行布局中的某些Views。或者,您可以通过扩展ArrayAdapter来编写自己的适配器类。我建议您编写自己的适配器,因为它既有趣又可以深入了解列表的填充方式。 Here's如何开始使用该指南。