我是 android 的新手,正在创建一个小应用程序,我从 sqlite 数据库获取数据并尝试从中生成 ListView 。
我的数据库助手类方法从表中获取数据:
public List<TestClass> getDataFromDb()
{
// open database conneciton
List<TestClass> contactList = new ArrayList<TestClass>();
// Select All Query
String selectQuery = "SELECT * from mytable";
Cursor cursor = myDatabase.rawQuery(selectQuery, null);
// looping through all rows and adding to list
if (cursor.moveToFirst())
{
do {
TestClass test = new TestClass();
test.setName(cursor.getString(0));
test.setAddress(cursor.getString(1));
// Adding data to list
contactList.add(test);
}
while (cursor.moveToNext());
}
return contactList;
}
并且在我的MainActivity.java 类的onCreate 方法中,我只是简单地调用上面的方法并获取列表如下:
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
DbAdapter info = new DbAdapter(this);
List<TestClass> nameList = info.getDataFromDb();
// Get a ListView from main view
// ListView itcItems = (ListView) findViewById(R.id.listMainView);
// set the ListView with "nameList"
}
我遇到的问题是如何在执行 List nameList = info.getDataFromDb();
后填充 ListView我看到的每个示例都使用字符串类型的 ArrayList 创建适配器,并将该数组列表作为第三个参数传递给适配器。
有没有办法通过传递 nameList 来生成 ListView ?
最佳答案
您正在寻找一个 ArrayAdapter。最简单的方法是这样的:
ArrayAdapter<TestClass> adapter = new ArrayAdapter<TestClass>(this, android.R.layout.simple_list_item_1, nameList);
itcItems.setListAdapter(adapter);
请注意,这种简单的方法将在 ListView 中显示 TestClass.toString() 的值。如果您希望文本具有不同的值,请覆盖 TestClass.toString。
要更改显示文本的值,请在您的 TestClass 中包含以下方法:
@Override
public String toString() {
return getName();
}
如果您想要一个自定义 View (除了简单的 TextView 之外的其他东西出现在 ListView 中),那么您将必须使用自定义类扩展 ArrayAdapter。
关于android - 是否可以用 List 填充 ListView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24856330/