我正在尝试学习java,我读了关于类型转换,实例化对象,数组,hashmap等。我在为Android编写代码,我做得很好,直到我发现自己这样做:
MyObject instObject = (MyObject)getItem(position);
就我目前所知…我在instObject中创建了一个MyObject的新实例,所以我认为值应该是0。但是,当我调用setText(...)
时,它工作了!= o
请尽量不要总结答案,因为理解这对我来说是非常困难的!
我会说西班牙语,我懂一点英语,但不是很好。
public class MyClass extends ListFragment {
List<MyObject> instObject; //instObject = 0
...
@Override
public void onActivityCreated(Bundle savedInstanceState){
super.onActivityCreated(savedInstanceState);
instObject = new ArrayList<MyObject>();
MyObject item = ...
instObject.add(item); //instObject = items
}
//Adapter{
...
@Override
public View getView(int position, View view, ViewGroup parent) {
MyObject instObject = (MyObject)getItem(position);
//instObject = ? (should not be zero?)
holder.title.setText( instObject.getTitle() );
// why return the corresponding title?
}
}
public class MyObject {
vars...
constructor...
setters...
getters...
}
}
解决谢谢! !:)
我有三个困惑…
:
我认为,如果"instObject",是在"onActivityCreated"中创建的,这个"instObject",不能从适配器内部访问。(我们不能)在适配器的内部,"instObject"是零,但是…我忘了在构造函数的适配器"instObject"中,再次获得在"onActivityCreated"中创建的项目。(对不起)
我想可能会得到这样的条目:
item = instObject.getItem(position); //well I'm newbie! :P
然后,得到这样的内容:
myView.setText(item.getTitle());
第三:
我忽略了getItem()方法,有这个:
@Override
public Object getItem(int position) {
return instObject.get(position);
}
在getView()之前,"instObject"有所有的项,但后来有:
MyObject instObject = (MyObject)getItem(position);
用技术语言来说,我想可能是这样的:
我在一个特定的位置引用了"instObject"。
没有技术……我创建了一个object类型的变量,具有相同的名称,并且只设置了"instObject"的所有项中的一个。
我想我明白了,再次感谢!:)
这取决于适配器内部的getItem()
方法做什么。但一般来说,当您执行getItem()
时,适配器从创建适配器时传递给适配器的集合中返回对该特定位置的对象的引用。
就我目前所知…我在instObject中创建了一个MyObject的新实例,所以我认为值应该是0。但是,当我调用setText(…)时,它工作了!!= o
在Java中,使用new
操作符创建一个新的对象/实例,如下所示:
Employee employee = new Employee();
你对getItem()
的调用返回了一个先前存在的对象的引用。基本上,在"幕后"的某个地方,已经创建了一个新对象,并且getItem()只是返回对它的引用。然后将该引用存储在instObject中。