summaryrefslogtreecommitdiff
path: root/Source/Android/src
diff options
context:
space:
mode:
authorLioncash <mathew1800@gmail.com>2013-11-16 03:56:58 -0500
committerLioncash <mathew1800@gmail.com>2013-11-16 03:56:58 -0500
commit94f8c68a35b6b29e6670092ebc78e0dcd206463e (patch)
treebc3162487415fc9d4bee09970993be41050170ae /Source/Android/src
parentc90ce1aad121eacda4f932bbebe2fb3de0ba6c43 (diff)
[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.
Diffstat (limited to 'Source/Android/src')
-rw-r--r--Source/Android/src/org/dolphinemu/dolphinemu/folderbrowser/FolderBrowserAdapter.java44
1 files changed, 32 insertions, 12 deletions
diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/folderbrowser/FolderBrowserAdapter.java b/Source/Android/src/org/dolphinemu/dolphinemu/folderbrowser/FolderBrowserAdapter.java
index 81d738b143..a9dc002733 100644
--- a/Source/Android/src/org/dolphinemu/dolphinemu/folderbrowser/FolderBrowserAdapter.java
+++ b/Source/Android/src/org/dolphinemu/dolphinemu/folderbrowser/FolderBrowserAdapter.java
@@ -27,9 +27,21 @@ import org.dolphinemu.dolphinemu.R;
*/
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 int id;
private final List<FolderBrowserItem> items;
+ private ViewHolder viewHolder;
/**
* Constructor
@@ -60,42 +72,50 @@ public final class FolderBrowserAdapter extends ArrayAdapter<FolderBrowserItem>
{
LayoutInflater vi = LayoutInflater.from(context);
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);
if (item != null)
{
- ImageView icon = (ImageView) convertView.findViewById(R.id.ListItemIcon);
- TextView title = (TextView) convertView.findViewById(R.id.ListItemTitle);
- TextView subtitle = (TextView) convertView.findViewById(R.id.ListItemSubTitle);
-
- if(title != null)
+ if (viewHolder.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.
if (item.isDirectory() && !item.getSubtitle().equals(context.getString(R.string.parent_directory)))
{
- subtitle.setVisibility(View.GONE);
+ viewHolder.subtitle.setVisibility(View.GONE);
}
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())
{
- icon.setImageResource(R.drawable.ic_menu_folder);
+ viewHolder.icon.setImageResource(R.drawable.ic_menu_folder);
}
else
{
- icon.setImageResource(R.drawable.ic_menu_file);
+ viewHolder.icon.setImageResource(R.drawable.ic_menu_file);
}
}
}