#java #android #casting #android-listfragment
#java #Android #Кастинг #android-listfragment
Вопрос:
Я пытаюсь изучать Java, я читал о кастинге, создании экземпляров объектов, массивов, хэш-карт и т. Д. Я создавал коды для Android, и у меня все шло хорошо, пока я не столкнулся с этим:
MyObject instObject = (MyObject)getItem(position);
Из того, что я узнал до сих пор… Я создаю новый экземпляр MyObject в instObject, поэтому я думаю, что значение должно быть равно нулю.
Но потом, когда я звоню 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».
Думаю, я понял, еще раз спасибо! 🙂
Комментарии:
1. Я не до конца понимаю проблему. Но «MyObject instObject = (MyObject) GetItem (position);» не создаст новый объект, вместо этого он вернет тот же объект, который вы добавили ранее.
2. @naveejr: он вернет ССЫЛКУ на этот объект (просто в качестве дополнительной информации)
Ответ №1:
Это зависит от того, что getItem()
делает метод внутри адаптера. Но, вообще говоря, когда вы это делаете getItem()
, адаптер возвращает ссылку на объект в этой конкретной позиции из коллекции, которая была передана адаптеру при создании адаптера.
Ответ №2:
Из того, что я узнал до сих пор… Я создаю новый экземпляр MyObject в instObject, поэтому я думаю, что значение должно быть равно нулю. Но затем, когда я вызываю setText(…) , это работает!!! =o
В Java вы создаете новый объект / экземпляр с new
помощью оператора, как в:
Employee employee = new Employee();
Ваш вызов getItem()
возвращает ссылку на уже существующий объект. По сути, где-то «за кулисами» уже создан новый объект, и GetItem() просто возвращает ссылку на него. Затем вы сохраняете эту ссылку в instObject.