我是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方法中,我只是调用上面的方法并获取List如下:
@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我见过的每个例子都是使用string类型的ArrayList创建一个Adapter并将该arraylist作为第三个参数传递给Adapter。
有没有办法通过传递 nameList 生成ListView?
答案 0 :(得分:2)
您正在寻找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();
}
如果你想要一个自定义视图(除了简单的TextView以外的东西出现在ListView中),那么你将不得不使用自定义类扩展ArrayAdapter。