mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-02-25 15:41:11 +00:00
[Android] Use the ViewHolder design pattern for the FolderBrowserAdapter. In directories with a lot of files, this should be noticeably smoother in terms of scrolling. Also fixed the case where the subtitle text might disappear.
This commit is contained in:
parent
c90ce1aad1
commit
94f8c68a35
@ -27,9 +27,21 @@ import org.dolphinemu.dolphinemu.R;
|
|||||||
*/
|
*/
|
||||||
public final class FolderBrowserAdapter extends ArrayAdapter<FolderBrowserItem>
|
public final class FolderBrowserAdapter extends ArrayAdapter<FolderBrowserItem>
|
||||||
{
|
{
|
||||||
|
// ViewHolder which is used to hold onto
|
||||||
|
// items within a listview. This is done
|
||||||
|
// so that findViewById is not needed to
|
||||||
|
// be excessively called over and over.
|
||||||
|
private static final class ViewHolder
|
||||||
|
{
|
||||||
|
TextView title;
|
||||||
|
TextView subtitle;
|
||||||
|
ImageView icon;
|
||||||
|
}
|
||||||
|
|
||||||
private final Context context;
|
private final Context context;
|
||||||
private final int id;
|
private final int id;
|
||||||
private final List<FolderBrowserItem> items;
|
private final List<FolderBrowserItem> items;
|
||||||
|
private ViewHolder viewHolder;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor
|
* Constructor
|
||||||
@ -60,42 +72,50 @@ public final class FolderBrowserAdapter extends ArrayAdapter<FolderBrowserItem>
|
|||||||
{
|
{
|
||||||
LayoutInflater vi = LayoutInflater.from(context);
|
LayoutInflater vi = LayoutInflater.from(context);
|
||||||
convertView = vi.inflate(id, parent, false);
|
convertView = vi.inflate(id, parent, false);
|
||||||
|
|
||||||
|
// Initialize the ViewHolder and store it.
|
||||||
|
viewHolder = new ViewHolder();
|
||||||
|
viewHolder.title = (TextView) convertView.findViewById(R.id.ListItemTitle);
|
||||||
|
viewHolder.subtitle = (TextView) convertView.findViewById(R.id.ListItemSubTitle);
|
||||||
|
viewHolder.icon = (ImageView) convertView.findViewById(R.id.ListItemIcon);
|
||||||
|
convertView.setTag(viewHolder);
|
||||||
|
}
|
||||||
|
else // Can recover the holder.
|
||||||
|
{
|
||||||
|
viewHolder = (ViewHolder) convertView.getTag();
|
||||||
}
|
}
|
||||||
|
|
||||||
final FolderBrowserItem item = items.get(position);
|
final FolderBrowserItem item = items.get(position);
|
||||||
if (item != null)
|
if (item != null)
|
||||||
{
|
{
|
||||||
ImageView icon = (ImageView) convertView.findViewById(R.id.ListItemIcon);
|
if (viewHolder.title != null)
|
||||||
TextView title = (TextView) convertView.findViewById(R.id.ListItemTitle);
|
|
||||||
TextView subtitle = (TextView) convertView.findViewById(R.id.ListItemSubTitle);
|
|
||||||
|
|
||||||
if(title != null)
|
|
||||||
{
|
{
|
||||||
title.setText(item.getName());
|
viewHolder.title.setText(item.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
if(subtitle != null)
|
if (viewHolder.subtitle != null)
|
||||||
{
|
{
|
||||||
// Remove the subtitle for all folders, except for the parent directory folder.
|
// Remove the subtitle for all folders, except for the parent directory folder.
|
||||||
if (item.isDirectory() && !item.getSubtitle().equals(context.getString(R.string.parent_directory)))
|
if (item.isDirectory() && !item.getSubtitle().equals(context.getString(R.string.parent_directory)))
|
||||||
{
|
{
|
||||||
subtitle.setVisibility(View.GONE);
|
viewHolder.subtitle.setVisibility(View.GONE);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
subtitle.setText(item.getSubtitle());
|
viewHolder.subtitle.setVisibility(View.VISIBLE);
|
||||||
|
viewHolder.subtitle.setText(item.getSubtitle());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (icon != null)
|
if (viewHolder.icon != null)
|
||||||
{
|
{
|
||||||
if (item.isDirectory())
|
if (item.isDirectory())
|
||||||
{
|
{
|
||||||
icon.setImageResource(R.drawable.ic_menu_folder);
|
viewHolder.icon.setImageResource(R.drawable.ic_menu_folder);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
icon.setImageResource(R.drawable.ic_menu_file);
|
viewHolder.icon.setImageResource(R.drawable.ic_menu_file);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user