为什么getItem(position)适用于新实例? (不应该是零?)

时间:2014-06-26 07:48:33

标签: java android casting android-listfragment

我正在尝试学习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”的所有项中的一个。

我想我明白了,再次感谢! :)

2 个答案:

答案 0 :(得分:1)

这取决于适配器内部getItem()方法的作用。但一般来说,当您执行getItem()时,适配器会在创建适配器时从传递给适配器的Collection返回对该特定位置的对象的引用。

答案 1 :(得分:0)

  

从我到目前为止所学到的...我在instObject中创建一个新的MyObject实例,所以,我认为该值应为零。但是,当我调用setText(...)时,它工作! = o

在Java中,您使用new运算符创建新对象/实例,如:

Employee employee = new Employee();

您对getItem()的调用将返回对预先存在的对象的引用。基本上,在幕后的某个地方,已经创建了一个新对象,而getItem()只是返回对它的引用。然后,将该引用存储在instObject中。