I'm having some trouble understanding how scope is affecting my code. I can't seem to access the public attributes of a public class.
I created a custom class ArtistPacket which has a block of information I would like to send to my custom adapter (ArtistListAdapter).
The custom class is below:
public class ArtistPacket{
public String name;
public int id;
public ArtistPacket(String name, int id){
this.name = name;
this.id = id;
}
}
It is defined in MainActivityFragment, where I create an ArtistListAdapter which takes these ArtistPackets.
public class MainActivityFragment extends Fragment{
...
ArtistListAdapter<ArtistPacket> artistListAdapter =
new ArtistListAdapter<ArtistPacket>(getActivity(), artistData);
...
I then define the ArtistListAdapter and 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) {
...
In the getView, I need the name and id from the ArtistPacket object (in this case artist). So I try calling
ArtistPacket artist = getItem(position);
textItemContent.setText((CharSequence) artist.name);
But I get a compile error. In the debugger, it appears as if the full object is coming through - it just doesn't seem like the Adapter access the name or id attribute.
The error I get is:
Error:(98, 58) error: cannot find symbol variable name
where ArtistPacket is a type-variable:
ArtistPacket extends Object declared in class
MainActivityFragment.ArtistListAdapter
Is there an issue with scope in my implementation? Why would the Adapter not be able to see the contents of the ArtistPacket object if it is plainly seen in the debugger?
Here's the full 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;
}