package cn.qqtheme.framework.adapter;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import java.util.Collections;
import java.util.LinkedList;
import cn.qqtheme.framework.icons.FilePickerIcon;
import cn.qqtheme.framework.util.ConvertUtils;
/**
* 文件路径数据适配
* <br />
* Author:李玉江[QQ:1032694760]
* DateTime:2017/01/08 01:20
* Builder:Android Studio
*
* @see cn.qqtheme.framework.picker.FilePicker
*/
public class PathAdapter extends BaseAdapter {
private static final String ROOT_HINT = "ROOT";
private LinkedList<String> paths = new LinkedList<>();
private Drawable arrowIcon = null;
public PathAdapter() {
arrowIcon = ConvertUtils.toDrawable(FilePickerIcon.getARROW());
}
public void updatePath(String path) {
paths.clear();
if (!path.equals("/")) {
String[] tmps = path.substring(path.indexOf("/") + 1).split("/");
Collections.addAll(paths, tmps);
}
paths.addFirst(ROOT_HINT);
notifyDataSetChanged();
}
@Override
public int getCount() {
return paths.size();
}
@Override
public String getItem(int position) {
String tmp = "/";
//忽略根目录
if (position == 0) {
return tmp;
}
for (int i = 1; i <= position; i++) {
tmp += paths.get(i) + "/";
}
return tmp;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final Context context = parent.getContext();
ViewHolder holder;
if (convertView == null) {
int matchParent = ViewGroup.LayoutParams.MATCH_PARENT;
int wrapContent = ViewGroup.LayoutParams.WRAP_CONTENT;
LinearLayout layout = new LinearLayout(context);
layout.setOrientation(LinearLayout.HORIZONTAL);
layout.setGravity(Gravity.CENTER_VERTICAL);
// fixed: 17-1-8 #79 安卓4.x兼容问题,java.lang.ClassCastException……onMeasure……
if (parent instanceof AbsListView) {
layout.setLayoutParams(new AbsListView.LayoutParams(matchParent, matchParent));
} else {
layout.setLayoutParams(new ViewGroup.LayoutParams(matchParent, matchParent));
}
TextView textView = new TextView(context);
LinearLayout.LayoutParams tvParams = new LinearLayout.LayoutParams(wrapContent, matchParent);
textView.setLayoutParams(tvParams);
textView.setGravity(Gravity.START | Gravity.CENTER_VERTICAL);
int padding = ConvertUtils.toPx(context, 5);
textView.setPadding(padding, 0, padding, 0);
layout.addView(textView);
ImageView imageView = new ImageView(context);
int width = ConvertUtils.toPx(context, 20);
imageView.setLayoutParams(new LinearLayout.LayoutParams(width, matchParent));
imageView.setImageResource(android.R.drawable.ic_menu_report_image);
layout.addView(imageView);
convertView = layout;
holder = new ViewHolder();
holder.textView = textView;
holder.imageView = imageView;
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.textView.setText(paths.get(position));
holder.imageView.setImageDrawable(arrowIcon);
return convertView;
}
public void recycleData() {
paths.clear();
if (arrowIcon instanceof BitmapDrawable) {
Bitmap homeBitmap = ((BitmapDrawable) arrowIcon).getBitmap();
if (null != homeBitmap && !homeBitmap.isRecycled()) {
homeBitmap.recycle();
}
}
}
private static class ViewHolder {
TextView textView;
ImageView imageView;
}
}