У меня возникли проблемы с пониманием того, как область действия влияет на мой код. Кажется, я не могу получить доступ к публичным атрибутам публичного класса.
Я создал пользовательский класс ArtistPacket
, в котором есть блок информации, который я хотел бы отправить своему пользовательскому адаптеру (ArtistListAdapter
).
Пользовательский класс ниже:
public class ArtistPacket{
public String name;
public int id;
public ArtistPacket(String name, int id){
this.name = name;
this.id = id;
}
}
Он определен в MainActivityFragment
, где я создаю ArtistListAdapter
, который принимает эти ArtistPackets
.
public class MainActivityFragment extends Fragment{
...
ArtistListAdapter<ArtistPacket> artistListAdapter =
new ArtistListAdapter<ArtistPacket>(getActivity(), artistData);
...
Затем я определяю ArtistListAdapter
и getView
private class ArtistListAdapter<ArtistPacket> extends ArrayAdapter<ArtistPacket>{
public ArtistListAdapter(Context context,ArrayList<ArtistPacket> artists){
super(getActivity(),0,artists);
}
@Override
public View getView(int position, View view, ViewGroup parent) {
...
В getView
мне нужны name
и id
из объекта ArtistPacket
(в данном случае artist
). Поэтому я пытаюсь позвонить
ArtistPacket artist = getItem(position);
textItemContent.setText((CharSequence) artist.name);
Но я получаю ошибку компиляции. В отладчике кажется, что проходит весь объект - просто не похоже, что адаптер получает доступ к атрибуту name
или id
.
Ошибка, которую я получаю:
Error:(98, 58) error: cannot find symbol variable name
where ArtistPacket is a type-variable:
ArtistPacket extends Object declared in class
MainActivityFragment.ArtistListAdapter
Есть ли проблема с областью действия в моей реализации? Почему адаптер не может видеть содержимое объекта ArtistPacket
, если оно ясно видно в отладчике?
Вот полный getView:
@Override
public View getView(int position, View view, ViewGroup parent) {
// Find the artist packet at a given position
ArtistPacket artist = getItem(position);
if (view == null) {
view = LayoutInflater.from(getContext()).inflate(R.layout.list_item, parent, false);
}
TextView textItemContent = (TextView) view.findViewById(R.id.list_item_content);
ImageView imageViewContent = (ImageView) view.findViewById(R.id.list_item_image);
textItemContent.setText((CharSequence) artist.name);
imageViewContent.setImageResource(artist.id);
return view;
}
artist
? - person Dan Harms   schedule 01.07.2015getItem(position)
, и в отладчике отображаются нужные объекты. Я полагаю, что проблема с областью действия? Компилятор позволяет мне манипулировать объектом так, как я считаю нужным — просто без доступа к его атрибутам. - person bkach   schedule 01.07.2015