我正在尝试学习java,我读到有关强制转换,实例化对象,数组,HashMaps等的内容。 我正在为Android制作代码,直到我发现自己为止,我做得很好:
MyObject instObject = (MyObject)getItem(position);
从我到目前为止所学到的...我在instObject中创建一个新的MyObject实例,所以,我认为该值应为零。
但是,当我打电话给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”的所有项中的一个。
我想我明白了,再次感谢! :)
答案 0 :(得分:1)
这取决于适配器内部getItem()
方法的作用。但一般来说,当您执行getItem()
时,适配器会在创建适配器时从传递给适配器的Collection返回对该特定位置的对象的引用。
答案 1 :(得分:0)
从我到目前为止所学到的...我在instObject中创建一个新的MyObject实例,所以,我认为该值应为零。但是,当我调用setText(...)时,它工作! = o
在Java中,您使用new
运算符创建新对象/实例,如:
Employee employee = new Employee();
您对getItem()
的调用将返回对预先存在的对象的引用。基本上,在幕后的某个地方,已经创建了一个新对象,而getItem()只是返回对它的引用。然后,将该引用存储在instObject中。