[英]Java - Returning an “address” from an ArrayList of names and addresses
[英]Java/Android Arraylist giving addresses
我正在嘗試使用vogella的針對sqlite在android中的教程的指導在android中顯示列表:
這是我的ProjectListDataSource類的一部分(這從sqlite數據庫獲取所有數據):
public List<ProjectList> getAllProjects() {
List<ProjectList> projects = new ArrayList<ProjectList>();
Cursor cursor = database.query(ProjectListHelper.TABLE_PROJECT_LIST,
allColumns, null, null, null, null, null);
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
projects.add(cursorToProjectList(cursor));
cursor.moveToNext();
}
// make sure to close the cursor
cursor.close();
return projects;
}
private ProjectList cursorToProjectList(Cursor cursor) {
ProjectList projList = new ProjectList();
projList.setId(cursor.getLong(0));
projList.setProjName(cursor.getString(1));
projList.setProjComment(cursor.getString(2));
projList.setProjDateTime(cursor.getString(3));
return projList;
}
這是我的活動課:
public class ProjectListActivity extends ListActivity implements
OnClickListener {
private static final String TAG = "ProjectListActivity";
private ProjectListDataSource datasource;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_projectlist);
Log.d(TAG, "On Creat'd");
init();
}
private void init() {
// Getting data from database and adding to ListView
datasource = new ProjectListDataSource(this);
datasource.open();
List<ProjectList> values = datasource.getAllProjects();
ArrayAdapter<ProjectList> adapter = new ArrayAdapter<ProjectList>(this,
android.R.layout.simple_list_item_activated_1, values);
setListAdapter(adapter);
}
但是這樣做時,我得到了這樣的意外結果(參見圖片):
http://i.imgur.com/tQMooi8.png
但是數據庫有這樣的記錄(參見圖片):
http://i.imgur.com/HfY2azs.png
任何人都可以解釋一下為什么我不能獲得列表視圖以顯示數據庫中的記錄,並給出解決方案...
謝謝,薇妮
基本適配器(例如ArrayAdapter或CursorAdapter)將僅將一個值映射到單個視圖。 在這里,一個ID為android.R.id.simple_list_item_activated_1
的TextView的ProjectList
對象
您需要一個布局(用於ListView中的單個視圖)和多個視圖,並將ID,名稱,日期,注釋等映射到該視圖。您需要擴展其中一個適配器。 最好是BaseAdapter或CursorAdapter。
這里有幾個問題,具體取決於您要顯示的內容。
之所以會在列表中看到對象字符串引用,是因為您使用的是普通的ArrayAdapter
, ArrayAdapter
對數組中的對象調用toString()
。 如果在ProjectList中重寫toString()
,則可以顯示所需的內容(盡管通常這不是解決此問題的最佳方法)。
允許您繼續使用普通ArrayAdapter
另一個選項是從要顯示的數據的ProjectList對象創建字符串數組。 有點浪費,但這是另一種選擇。
您通常想要做的是擴展ArrayAdapter
並重寫getView()
。 在getView()
,分配要在視圖中顯示的數據。
如果要在單個列表項中顯示ProjectList對象中的所有數據,則還需要創建一個自定義布局來表示該行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.