2012-12-18 57 views
0

我正在開發一個簡單的應用程序在Android中。我有一個類別列表(現在),我想顯示爲一個列表,然後(但這是很遙遠的)點擊,啓動一些功能的另一個活動......以及情況:我在哪裏指定哪些值在使用自定義適配器的listView中的哪裏?

我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,或者它是否「喜歡」(在categorie.class中獲取並設置Preferita)。

當我開始,適配器的部分是:

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

,一切都奇蹟般地好......爲什麼使用默認佈局OK?再次,我在哪裏指定什麼地方?

在此先感謝。

回答

1

當你想實現一個簡單的列表,使用股票ArrayAdapter沒有問題。 Android會查看您提供給適配器的對象,在這些對象上調用toString(),然後用[email protected]:id/text1填充TextViewString。它的工作「神奇地」當你使用android.R.layout.simple_list_item_1因爲佈局包括TextView[email protected]:id/text1

如果你想在你ListView在每一行的佈局的控制,你可以使用SimpleAdapter,它可以讓您在值映射到一定Views你的行佈局。或者,您可以通過擴展ArrayAdapter來編寫自己的適配器類。我建議編寫自己的適配器,因爲它既有趣又能讓人對如何填充列表有所瞭解。 Here's如何開始使用指南。