我在.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