Implement ViewHolder pattern on the GameListAdapter.

This commit is contained in:
Eder Bastos 2014-06-24 22:27:34 -04:00
parent eb3de73ab9
commit 53e4f3d73c
1 changed files with 37 additions and 20 deletions

View File

@ -41,38 +41,55 @@ public final class GameListAdapter extends ArrayAdapter<GameListItem>
} }
@Override @Override
public View getView(int position, View convertView, ViewGroup parent) public View getView(int position, View gameView, ViewGroup parent)
{ {
if (convertView == null) ViewHolder holder;
// If getView() was called without passing in a recycled view,
if (gameView == null)
{ {
LayoutInflater vi = LayoutInflater.from(context); // Inflate a new view using the appropriate XML layout.
convertView = vi.inflate(id, parent, false); LayoutInflater inflater = LayoutInflater.from(context);
gameView = inflater.inflate(id, parent, false);
// Instantiate a holder to contain references to the game's views.
holder = new ViewHolder();
holder.title = (TextView) gameView.findViewById(R.id.GameListItemTitle);
holder.subtitle = (TextView) gameView.findViewById(R.id.GameListItemSubTitle);
holder.icon = (ImageView) gameView.findViewById(R.id.GameListItemIcon);
// Attach this list of references to the view.
gameView.setTag(holder);
}
// If we do have a recycled view, we can use the references it already contains.
else
{
holder = (ViewHolder) gameView.getTag();
} }
// Get a reference to the game represented by this row.
final GameListItem item = getItem(position); final GameListItem item = getItem(position);
// Whether this row's view is newly created or not, set the children to contain the game's data.
if (item != null) if (item != null)
{ {
TextView title = (TextView) convertView.findViewById(R.id.GameListItemTitle); holder.title.setText(item.getName());
TextView subtitle = (TextView) convertView.findViewById(R.id.GameListItemSubTitle); holder.subtitle.setText(item.getData());
ImageView icon = (ImageView) convertView.findViewById(R.id.GameListItemIcon); holder.icon.setImageBitmap(item.getImage());
if (title != null)
title.setText(item.getName());
if (subtitle != null)
subtitle.setText(item.getData());
if (icon != null)
{
icon.setImageBitmap(item.getImage());
}
} }
// Make every other game in the list grey // Make every other game in the list grey
if (position % 2 == 1) if (position % 2 == 1)
convertView.setBackgroundColor(0xFFE3E3E3); gameView.setBackgroundColor(0xFFE3E3E3);
return convertView; return gameView;
}
private final class ViewHolder
{
public TextView title;
public TextView subtitle;
public ImageView icon;
} }
} }