我在.net中完成了大量的強制類型轉換 - 主要是從泛型對象向更具體的對象轉換,我知道會工作。但是我從來沒有投到我自己的類中,直到現在我在Android中已經放置了一些來自示例的代碼。如何從getAdapter到我的泛型類型的工作
我似乎無法找到很好的例子,顯示與正在被投與來自類的代碼伴隨的代碼。基本上,我試圖準確理解在這種情況下鑄造是如何工作的,因爲我想修改下面稱爲dbData的類以包含其他變量和方法,但我不確定它將如何影響下面的onClick方法中的投射。 onClick方法位於包含listView和一對按鈕的Activity中。這些按鈕可以添加一個listView項目或刪除第一個listView項目。當刪除該項目時,它發送這個拋出的問題dbData =(dbData)lstView.getAdapter()。getItem(0);
dbData是從我的例子中派生出來的類。我無法理解的部分是,演員似乎成功地使用演員填充變量id和dbData。
它是如何知道這麼做的?基本問題,但似乎無法找到詳細的說明。如果dbData只是一個字符串,getItem(0)只返回一個字符串,這看起來很明顯。但在這種情況下,它填充字符串「dbData」和整數「id」我可以從演員陣列填充其他變量或對象嗎?這個問題的目的是理論上的;意思是說,如果我可以抓住其他變量,我怎麼知道我可以抓住哪些變量,並且是否有任何特殊的技術來定義dbData中的變量?
我可以將其他變量和類添加到dbData類而不會搞亂轉換,或讓這些變量無意中在轉換中填充?我將如何肯定要這樣做?
有希望的是,我只是試圖瞭解演員的作品是如何在我的問題中出現的。感謝您的任何幫助!
下面是與上述投活動代碼:
public void onClick(View view) {
@SuppressWarnings("unchecked")
ListView lstView = (ListView)findViewById(R.id.lstHolidays);
ArrayAdapter<dbData> adapter = (ArrayAdapter<dbData>) lstView.getAdapter();
dbData dbData = null;
switch (view.getId()) {
case R.id.add:
String[] comments = new String[] { "Cool", "Very nice", "Hate it" };
int nextInt = new Random().nextInt(3);
// save the new dbData to the database
dbData = datasource.createDB_Row(comments[nextInt]);
adapter.add(dbData);
break;
case R.id.delete:
if (lstView.getAdapter().getCount() > 0) {
dbData = (dbData) lstView.getAdapter().getItem(0);
datasource.deleteDB_Row(dbData);
adapter.remove(dbData);
}
break;
}
adapter.notifyDataSetChanged();
}
這裏的dbData類:
public class dbData {
private long id;
private String dbData;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getDbData() {
return dbData;
}
public void setDbData(String dbData) {
this.dbData = dbData;
}
// Will be used by the ArrayAdapter in the ListView
@Override
public String toString() {
return dbData;
}
}
是ArrayAdapter已設置。最後,我想我幾乎可以理解這些代碼是如何工作的。 C#和Java是相似的,但是語法有時會拋出。 –
2015-02-12 16:48:07