我正在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);
一切都神奇地好了......为什么使用默认布局好?再次,我在哪里指定哪里去了?
提前感谢。
答案 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如何开始使用该指南。