AN GridView文件管理器Demo

一个分页gridview显示文件的文件管理器

1、MainActivity.java

package com.example.mylistviewwithfilemana;

import java.io.File;
import java.util.ArrayList;

import android.app.Activity;
import android.content.Intent;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.Display;
import android.view.View;
import android.view.WindowManager;
import android.view.WindowManager.LayoutParams;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.GridView;
import android.widget.TextView;

public class MainActivity extends Activity {
	private final static String TAG = "MainActivity";
	private final static int GRID_MODE_NUM = 8;
	private int gridPageStack[] = new int[10000];
	View.OnClickListener switchPage;
	int top = -1;

	private int currentGridPage = -100;
	private ArrayList<BaseData> mData = new ArrayList<BaseData>();
	private ArrayList<BaseData> tmpArray = new ArrayList<BaseData>();
	private String mDir = "/sdcard";
	private Button lastPageBtn, nextPageBtn, btnSwitch;
	private TextView xthGridPage, middleLine, totalGridPage;
	GridView gridView;
	private GridAdapter gridAdapter;

	private Resources resourceGrid;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.gridview);
		resourceGrid = getResources();
		lastPageBtn = (Button) findViewById(R.id.btnleft);
		nextPageBtn = (Button) findViewById(R.id.btnRight);
		btnSwitch = (Button) findViewById(R.id.btnSwitch);
		xthGridPage = (TextView) findViewById(R.id.xthGridPage);
		middleLine = (TextView) findViewById(R.id.middleLine);
		totalGridPage = (TextView) findViewById(R.id.totalGridPage);
		gridView = (GridView) findViewById(R.id.gridView1);

		lastPageBtn.setVisibility(View.GONE);
		nextPageBtn.setVisibility(View.GONE);
		xthGridPage.setVisibility(View.GONE);
		middleLine.setVisibility(View.GONE);
		totalGridPage.setVisibility(View.GONE);
		gridView.setVisibility(View.GONE);
        
		//Bitmap[] fileTypeBitmap = new Bitmap[5];
		//ArrayList<Bitmap> file = new ArrayList<Bitmap>();
		//file.get(index)
		gridAdapter = new GridAdapter(this, tmpArray);
		gridView.setAdapter(gridAdapter);
		switchPage = new Button.OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				switch (v.getId()) {
				case R.id.btnleft:
					goLastPage();
					break;
				case R.id.btnRight:
					goNextPage();
					break;
				case R.id.btnSwitch:

					displayGrid();
				}

			}

		};
		lastPageBtn.setOnClickListener(switchPage);
		nextPageBtn.setOnClickListener(switchPage);
		btnSwitch.setOnClickListener(switchPage);
		gridView.setOnItemClickListener(onItemClickListener);

		Log.i(TAG, "oncreate---------activity id: "
				+ Thread.currentThread().getId() + "-------name :"
				+ Thread.currentThread().getName());

	}

	private Handler handler = new Handler() {
		public void handleMessage(Message msg) {
			if (msg.what == 1) {
				setxthGridPage();
				settotalGridPage();
				constructCurrentGridPage();
				Log.i(TAG, "handler---------activity id: "
						+ Thread.currentThread().getId() + "-------name :"
						+ Thread.currentThread().getName());

			}

		}

	};
	private Handler handler2 = new Handler() {
		public void handleMessage(Message msg) {
			if (msg.what == 1) {
				setxthGridPage();
				settotalGridPage();
				constructCurrentGridPage();
				Log.i(TAG, "handler---------activity id: "
						+ Thread.currentThread().getId() + "-------name :"
						+ Thread.currentThread().getName());

			}

		}

	};

	public void goLastPage() {
		if (currentGridPage == 1)
			return;
		--currentGridPage;
		constructCurrentGridPage();
		setxthGridPage();
		settotalGridPage();
	}

	public void goNextPage() {
		if ((currentGridPage * GRID_MODE_NUM) >= mData.size())
			return;
		++currentGridPage;
		constructCurrentGridPage();
		setxthGridPage();
		settotalGridPage();
	}

	public void setxthGridPage() {
		xthGridPage.setText(String.valueOf(currentGridPage));
	}

	public void settotalGridPage() {
		int maxPage = mData.size() / GRID_MODE_NUM;
		if (mData.size() > GRID_MODE_NUM && mData.size() % GRID_MODE_NUM != 0) {
			maxPage++;
		}
		if (maxPage == 0)
			maxPage++;
		totalGridPage.setText(String.valueOf(maxPage));
	}

	public void displayGrid() {
		Uri uri = Uri.fromFile(new File("/sdcard"));
		mDir = uri.getPath();// 起始目录
		currentGridPage = 1;
		getData();

		lastPageBtn.setVisibility(View.VISIBLE);
		nextPageBtn.setVisibility(View.VISIBLE);
		xthGridPage.setVisibility(View.VISIBLE);
		middleLine.setVisibility(View.VISIBLE);
		totalGridPage.setVisibility(View.VISIBLE);
		gridView.setVisibility(View.VISIBLE);
	}

	public void onFinish() {
		Message msg = handler2.obtainMessage();
		msg.what = 1;
		// Bundle bundle =new Bundle();
		handler2.sendMessage(msg);
	}

	/*
	获取每一层的文件,mDir一开始要设置为根目录,这个过程较为耗时,所以新开了一个线程来执行,这里使用了handler
	在获取完所有的数据之后那么就提示主线程该刷新UI了,所以调用了onFinish函数来发送消息给主线程。主线程收到grid的某一页的
	数据之后就可以刷新数据了。
	同时在获取每一个文件的时候还要根据其后缀名的不同来赋予其不同的默认图标来显示
	辨别后缀名的话,在value文件夹中新建一个array xml文件,里面包含了resource标签、array标签、item标签(数组内容)
	然后使用getResources()的对象来通过调用getStringArray来拿出整个数组元素。然后就可以比较了
	有一点注意的是:我的back按钮不是根据栈里面的路径来回退而是根据获取到父目录来回退,这里简直浪费时间。
	*/
	private void getData() {
		new Thread(new Runnable() {
			public void run() {
				mData.clear();
				BaseData baseData;

				File f = new File(mDir);
				File[] files = f.listFiles();
				if (!mDir.equals("/sdcard")) {// 根目录下不会有back这一个玩意
					baseData = new BaseData();
					baseData.setName("back");
					baseData.setPath(f.getParent());
					//baseData.setIcon(R.drawable.icon_file_return);
					baseData.setType(Constants.FILE_TYPE_RETURN);
					mData.add(baseData);
				}
				if (files != null) {
					for (int i = 0; i < files.length; i++) {

						baseData = new BaseData();
						baseData.setName(files[i].getName());
						baseData.setPath(files[i].getPath());
						String name = files[i].getName();
						if (files[i].isDirectory()) {
							baseData.setType(Constants.FILE_TYPE_DIR);
						}

						else {
							int pos = name.lastIndexOf(".");
							String extension = "";
							if (pos > 0) {
								extension = name.toLowerCase().substring(
										pos + 1);
								baseData.setFormat(extension);
							}
							baseData.setModifyTime(files[i].lastModified());

							if (check(name, resourceGrid
									.getStringArray(R.array.photo_filter))) {
								baseData.setType(Constants.FILE_TYPE_PICTURE);

							} else if (check(name, resourceGrid
									.getStringArray(R.array.audio_filter))) {
								baseData.setType(Constants.FILE_TYPE_SONG);

							} else if (check(name, resourceGrid
									.getStringArray(R.array.video_filter))) {
								baseData.setType(Constants.FILE_TYPE_VIDEO);

							} else {
								baseData.setType(Constants.FILE_TYPE_FILE);

							}

						}

						mData.add(baseData);

					}
				}
				Log.i(TAG, "run---------activity id: "
						+ Thread.currentThread().getId() + "-------name :"
						+ Thread.currentThread().getName());
				onFinish();
			}
		}).start();

	}

	private boolean check(final String name, final String[] extensions) {
		for (String end : extensions) {
			// Name never to null, without exception handling
			if (name.toLowerCase().endsWith(end)) {
				return true;
			}
		}

		return false;
	}
    /*
	如果点击的是文件夹,那么就获取该路径,然后调用getData获取下一层路径的所有文件然后显示即可
	如果点击的是返回的话,那么就弹栈,其实栈在这里面有很多作用:可以记录上一层的页码,和焦点所在位置,上一层的路径。
	在这里只是实现了记录页码。
	如果点击的是文件的话,比如视频,音乐等等,完全可以跳到其他activity进行播放,这里没有实现。
	*/
	private OnItemClickListener onItemClickListener = new OnItemClickListener() {

		@Override
		public void onItemClick(AdapterView<?> parent, View view, int position,
				long id) {
            
            int offset = (currentGridPage-1)*GRID_MODE_NUM;
            if(offset!=0)
                 position=position+offset;
            Log.i(TAG,"-----position-------:"+position);
			if ((Integer) mData.get(position).getType()==Constants.FILE_TYPE_DIR) {
				Log.i(TAG,"-----is a_folder-------:");
				mDir = (String) mData.get(position).getPath();

				gridPageStack[++top] = currentGridPage;
				currentGridPage = 1;
				getData();

			} else if ((Integer) mData.get(position).getType()==Constants.FILE_TYPE_RETURN) {
				Log.i(TAG,"-----is a_return-------:");
				mDir = (String) mData.get(position).getPath();
				// mData = getData();
				currentGridPage = gridPageStack[top--];
				getData();

			} else {
				Log.i(TAG,"-----is a media file-------:");
				finishWithResult((String) mData.get(position).getPath());
			}

		}

	};
    /*
	notifyDataSetChanged调用adapter对象的该函数,那么就可以更新adapter的内容了,就是grid的内容了
	*/
	public void constructCurrentGridPage() {
		// TODO Auto-generated method stub
		tmpArray.clear();
		int begin = (currentGridPage - 1) * GRID_MODE_NUM; 
		int end = currentGridPage * GRID_MODE_NUM;
		if (mData.size() < end)
			end = mData.size();
		for (int i = begin; i < end; i++) {
			BaseData baseData = new BaseData();
			baseData = mData.get(i);
			tmpArray.add(baseData);
		}
		Log.i(TAG, "construct---------activity id: "
				+ Thread.currentThread().getId() + "-------name :"
				+ Thread.currentThread().getName());
		gridAdapter.notifyDataSetChanged();
	}

	private void finishWithResult(String path) {

	}

}

2、GridAdapter

package com.example.mylistviewwithfilemana;


import java.util.ArrayList;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;


public class GridAdapter extends BaseAdapter {
	private LayoutInflater mInflater;
	private ArrayList<BaseData> gridOnePage = new ArrayList<BaseData>();
	public GridAdapter(Context context,ArrayList<BaseData>gridOnePage) {
		this.mInflater = LayoutInflater.from(context);
		this.gridOnePage=gridOnePage;
	}

	public int getCount() {
		//return mData.size();
		if(gridOnePage==null)
			  return 0;
		return gridOnePage.size();
	}

	public Object getItem(int arg0) {
		return null;
	}

	public long getItemId(int arg0) {
		return 0;
	}

	public View getView(int position, View convertView, ViewGroup parent) {
		ViewHolder holder = null;
		if (convertView == null) {
			holder = new ViewHolder();
			convertView = mInflater.inflate(R.layout.gridview_item, null);
			holder.img = (ImageView) convertView.findViewById(R.id.img);
			holder.title = (TextView) convertView.findViewById(R.id.title);
			holder.info = (TextView) convertView.findViewById(R.id.info);
			convertView.setTag(holder);
		} else {
			holder = (ViewHolder) convertView.getTag();
		}

		holder.img.setBackgroundResource((Integer)gridOnePage.get(position)
				.getIcon());
		//holder.img.setImageBitmap(bm);
		holder.title.setText((String) gridOnePage.get(position).getName());
		holder.info.setText((String) gridOnePage.get(position).getPath());
		return convertView;
	}
	public final class ViewHolder {
		public ImageView img;
		public TextView title;
		public TextView info;
	}
}

3、Constants.java

package com.example.mylistviewwithfilemana;

public class Constants {
    /** file list focus position */
    public static final int POSITION_0 = 0;
    /** file list focus position */
    public static final int POSITION_9 = 9;
    /** list mode one page most display nine data **/
    public static final int LIST_MODE_DISPLAY_NUM = 9;

    /**
     * file browsing interface display the current file types including
     * pictures, video, music
     */
    public static final int OPTION_STATE_ALL = 0x01;
    /**
     * file browsing interface display the current file types only pictures and
     * folder
     */
    public static final int OPTION_STATE_PICTURE = 0x02;
    /**
     * file browsing interface display the current file types only music and
     * folder
     */
    public static final int OPTION_STATE_SONG = 0x03;
    /**
     * file browsing interface display the current file types only video and
     * folder
     */
    public static final int OPTION_STATE_VIDEO = 0x04;
    /** flip over instruction: through the remote page up */
    public static final int KEYCODE_PAGE_UP = 0x5;
    /** flip over instruction: through the remote downward turn the page */
    public static final int KEYCODE_PAGE_DOWN = 0x6;
    /** flip over instruction: through the Touch events page up */
    public static final int TOUCH_PAGE_UP = 0x7;
    /** flip over instruction: through the Touch events downward turn the page */
    public static final int TOUCH_PAGE_DOWN = 0x8;
    /** file browsing main interface */
    public static final int BROWSER_TOP_DATA = 0x01;
    /** file browsing interface data from local usb disk equipment */
    public static final int BROWSER_LOCAL_DATA = 0x02;
    /** file browsing interface data from network samba equipment */
    public static final int BROWSER_SAMBA_DATA = 0x03;
    /** file browsing interface data from network dlna equipment */
    public static final int BROWSER_DLNA_DATA = 0x04;
    /** refresh local data */
    public static final int UPDATE_TOP_DATA = 0x05;
    /** refresh local data */
    public static final int UPDATE_LOCAL_DATA = 0x06;
    /** refresh dlna data */
    public static final int UPDATE_DLNA_DATA = 0x07;
    /** refresh samba data */
    public static final int UPDATE_SAMBA_DATA = 0x08;
    /** switching media type refresh UI */
    public static final int UPDATE_MEDIA_TYPE = 0x09;
    /** anomaly hints */
    public static final int UPDATE_EXCEPTION_INFO = 0xa;
    /** refresh loading progress information */
    public static final int UPDATE_PROGRESS_INFO = 0xb;
    /** disk loading/remove **/
    public static final int UPDATE_DISK_DEVICE = 0xc;
    /** network cannot use */
    public static final int NETWORK_EXCEPTION = 0xd;
    /** network status changes for not use */
    public static final int NETWORK_UNCONNECTED = 0xf;
    /** without the support of media formats */
    public static final int UNSUPPORT_FORMAT = 0x10;
    /** display loading hints */
    public static final int PROGRESS_TEXT_SHOW = 0x11;
    /** hidden loading hints */
    public static final int PROGRESS_TEXT_HIDE = 0x12;
    /** the mouse moves listview focus update */
    public static final int UPDATE_LISTVIEW_FOCUS = 0x13;
    /** the mouse operate page up */
    public static final int MOUSE_PAGE_UP = 0x14;
    /** the mouse operate downward turn the page */
    public static final int MOUSE_PAGE_DOWN = 0x15;
    /** file categories: general file */
    public static final int FILE_TYPE_FILE = 0x1;
    /** file categories: picture */
    public static final int FILE_TYPE_PICTURE = 0x2;
    /** file categories: music */
    public static final int FILE_TYPE_SONG = 0x3;
    /** file categories: video */
    public static final int FILE_TYPE_VIDEO = 0x4;
    /** file categories: dir */
    public static final int FILE_TYPE_DIR = 0x5;
    /** file categories: return */
    public static final int FILE_TYPE_RETURN = 0x6;
    /** file categories: mstarplaylist */
    public static final int FILE_TYPE_MPLAYLIST = 0x7;
    /** to return to dlna root page */
    public static final String RETURN_TOP = "top";
    /** returns to the local root page */
    public static final String RETURN_LOCAL = "local";
    /** to return to dlna root page */
    public static final String RETURN_DLNA = "dlna";
    /** returns to the samba root page */
    public static final String RETURN_SAMBA = "samba";
    /** currently browsing the content page */
    public static final String BUNDLE_PAGE = "current_page";
    /** currently browsing files list of total page */
    public static final String BUNDLE_TPAGE = "total_page";
    /** currently browsing files list focus position */
    public static final String BUNDLE_INDEX = "current_index";
    public static final String BUNDLE_INDEX_KEY = "com.jrm.index";
    public static final String BUNDLE_BASEDATA_KEY = "player_basedata";
    public static final String BUNDLE_FILETYPE_KEY = "player_filetype";
    public static final String BUNDLE_FILEURL_KEY = "player_fileurl";
    public static final String BUNDLE_LIST_KEY = "com.jrm.arraylist";
    public static final String SOURCE_FROM = "sourceFrom";
    public static final String ADAPTER_POSITION = "adapter.position";
    public static final String DB_NAME = "videoplay.db";
    public static final String VIDEO_PLAY_LIST_TABLE_NAME = "videoplaylist";
    // resources from the samba
    public static final int SOURCE_FROM_SAMBA = 0x011;
    /** resources from local disk */
    public static final int SOURCE_FROM_LOCAL = 0x12;
    /** media scanning abnormal state */
    public static final int FAILED_BASE = 0x00;
    /** Ping far end equipment failure: */
    public static final int FAILED_TIME_OUT = FAILED_BASE + 1;
    /** samba landing when password mistake */
    public static final int FAILED_WRONG_PASSWD = FAILED_TIME_OUT + 1;
    /** landing samba failure */
    public static final int FAILED_LOGIN_FAILED = FAILED_WRONG_PASSWD + 1;
    /** landing samba failure */
    public static final int MOUNT_FAILED = FAILED_LOGIN_FAILED + 1;
    /** landing samba other abnormal */
    public static final int FAILED_LOGIN_OTHER_FAILED = MOUNT_FAILED + 1;
    // AB function of the switch
    public static boolean abFlag = false;
    // A function of the switch
    public static boolean aFlag = false;
    public static int mVideoSubtitleNo = 0;

    public static final int THREE_D_MODE_2D_TO_3D = 2;
    public static final int THREE_D_MODE_AUTO = 1;
    public static final int THREE_D_MODE_CHECK_BOARD = 7;
    public static final int THREE_D_MODE_FRAME_SEQUENTIAL = 8;
    public static final int THREE_D_MODE_LEFT_RIGHT = 0;
    public static final int THREE_D_MODE_LINE_ALTERNATIVE = 5;
    public static final int THREE_D_MODE_NONE = 0;
    public static final int THREE_D_MODE_PIXEL_ALTERNATIVE = 6;
    public static final int THREE_D_MODE_RIGHT_LEFT = 1;
    public static final int THREE_D_MODE_SIDE_BY_SIDE = 3;
    public static final int THREE_D_MODE_TOP_BOTTOM = 4;
    // Play subtitles
    // public static int[] subTitleSettingOptText = {
    // R.string.subtitle_type_value, R.string.subtitle_out_path_value,
    // R.string.subtitle_in_no_value, R.string.subtitle_language_value,
    // R.string.subtitle_font_value, R.string.subtitle_font_size_value,
    // R.string.subtitle_color_value, R.string.subtitle_frame_value,
    // R.string.subtitle_area_value, R.string.subtitle_adjust_value
    // };
    // Choose played
    public static final int CHOOSE_TIME = 18;
    public static final int SEEK_TIME = 19;
    public static final int OPEN_DUAL_SEEK_TIME = 20;
    public static final int SET_LEFT_VIDEO_SIZE = 21;
    public static final int HANDLE_MESSAGE_PLAYER_EXIT = 22;
    public static final int HANDLE_MESSAGE_CHECK_AB = 23;
    public static final int HANDLE_MESSAGE_SKIP_BREAKPOINT = 24;
    public static final int OSD_3D_UI = 25;
    public static final int SetThumbnailBorderViewOnFocus = 30;
    public static final int ShowThumbnailBorderView = 31;
    public static final int SeekWithHideThumbnailBorderView = 32;
    public static final int seekThumbnailPos = 33;
    public static final int OpenThumbnailPlayer = 34;
    public static final int HideThumbnailBorderView = 35;
    public static final int EnargeThumbnail = 36;
    public static final int FowrardThumbnail = 37;
    public static final int PrepareMediaPlayer= 38;
    public static final int RefreshThumbnailSeekViewPosition= 39;
    public static final int ShowController = 40;
    public static final int SHOW_SUBTITLE_DIALOG = 124;
    public static final int SHOW_SUBTITLE_LIST_DIALOG = 125;

    // Hidden video article control
    public static final int HIDE_PLAYER_CONTROL = 13;
    public static final String MPO = "mpo";
    public static final String GIF = "gif";
    public static boolean isExit = true;
    public static final int START_MEDIA_PLAYER = 100;
    public static boolean bSupportDualDecode = true;
    public static final boolean bStreamLessEnable = false;

}


4、BaseData.java

package com.example.mylistviewwithfilemana;

import android.os.Parcel;
import android.os.Parcelable;
import android.graphics.Bitmap;



/**
* Data provide foundation class(photo Music Video Other search).
*/
public class BaseData implements Parcelable {
  
  private Bitmap thumbnail;
  // file name
  private String name;

  // file AP(absolute path)
  private String path;

  // parent AP(absolute path)
  private String parentPath;

  // file size
  private String size;

  // file format
  private String format;

  // dile description
  private String description;

  // artist
  private String artist;

  // title
  private String title;

  // modifyTime
  private long modifyTime;

  // Music files in the database of the key word
  private long id = 0;

  // Album art id
  private long album;

  // file type
  private int type;

  // Image resources id
  private int icon;

  private int _duration;

  // Duration, in seconds for the unit
  private String duration;

  public BaseData() {
  }

  public BaseData(int type) {
      this.type = type;
      // According to the types of sure icon
      if (Constants.FILE_TYPE_PICTURE == type) {
          this.icon = R.drawable.icon_file_pic;
      } else if (Constants.FILE_TYPE_SONG == type) {
          this.icon = R.drawable.icon_file_song;
      } else if (Constants.FILE_TYPE_VIDEO == type) {
          this.icon = R.drawable.icon_file_video;
      } else if (Constants.FILE_TYPE_FILE == type) {
          this.icon = R.drawable.icon_file_file;
      } else if (Constants.FILE_TYPE_DIR == type) {
          this.icon = R.drawable.icon_file_folder;
      } else if (Constants.FILE_TYPE_RETURN == type) {
          this.icon = R.drawable.icon_file_return;
      }

  }

  /**
   * @return the name
   */
  public String getName() {
      return name;
  }

  /**
   * @param name the name to set
   */
  public void setName(String name) {
      this.name = name;
  }

  /**
   * @return the path
   */
  public String getPath() {
      return path;
  }

  /**
   * @param path the path to set
   */
  public void setPath(String path) {
      this.path = path;
  }

  /**
   * @return the parentPath
   */
  public String getParentPath() {
      return parentPath;
  }

  /**
   * @param parentPath the parentPath to set
   */
  public void setParentPath(String parentPath) {
      this.parentPath = parentPath;
  }

  /**
   * @return the size
   */
  public String getSize() {
      return size;
  }

  /**
   * @param size the size to set
   */
  public void setSize(String size) {
      this.size = size;
  }

  /**
   * @return the format
   */
  public String getFormat() {
      return format;
  }

  /**
   * @param format the format to set
   */
  public void setFormat(String format) {
      this.format = format;
  }

  /**
   * @return the type
   */
  public int getType() {
      return type;
  }

  public void setDuration(int duration) {
      this._duration = duration;
      //this.duration = Tools.formatDuration(duration);
  }

  public int getDuration() {
      return _duration;
  }

  public String getDuration2() {
      return duration;
  }

  /**
   * @param type the type to set
   */
  public void setType(int type) {
      this.type = type;

      if (Constants.FILE_TYPE_DIR == type) {
          this.icon = R.drawable.icon_file_folder;
      } else if (Constants.FILE_TYPE_RETURN == type) {
          this.icon = R.drawable.icon_file_return;
      } else if (Constants.FILE_TYPE_PICTURE == type) {
          this.icon = R.drawable.icon_file_pic;
      } else if (Constants.FILE_TYPE_SONG == type) {
          this.icon = R.drawable.icon_file_song;
      } else if (Constants.FILE_TYPE_VIDEO == type) {
          
			this.icon = R.drawable.icon_file_video;
			
      } else if (Constants.FILE_TYPE_FILE == type) {
          this.icon = R.drawable.icon_file_file;
      }
  }
  /**
   * @return the description
   */
  public String getDescription() {
      return description;
  }

  /**
   * @param description the description to set
   */
  public void setDescription(String description) {
      this.description = description;
  }

  /**
   * @return the modifyTime
   */
  public long getModifyTime() {
      return modifyTime;
  }

  /**
   * @param modifyTime the modifyTime to set
   */
  public void setModifyTime(long modifyTime) {
      this.modifyTime = modifyTime;
  }

  /**
   * @return the icon
   */
  public int getIcon() {
      return icon;
  }

  /**
   * @param icon the icon to set
   */
  public void setIcon(int icon) {
      this.icon = icon;
  }
	public Bitmap getThumbnail() {
      return thumbnail;
  }
  public void setThumbnail(Bitmap thumbnail) {
      this.thumbnail= thumbnail;
  }
  /**
   * @return the artist
   */
  public String getArtist() {
      return artist;
  }

  /**
   * @param artist the artist to set
   */
  public void setArtist(String artist) {
      this.artist = artist;
  }

  /**
   * @return the title
   */
  public String getTitle() {
      return title;
  }

  /**
   * @param title the title to set
   */
  public void setTitle(String title) {
      this.title = title;
  }

  /**
   * @return the id
   */
  public long getId() {
      return id;
  }

  /**
   * @param id the id to set
   */
  public void setId(long id) {
      this.id = id;
  }

  /**
   * @return the album
   */
  public long getAlbum() {
      return album;
  }

  /**
   * @param album the album to set
   */
  public void setAlbum(long album) {
      this.album = album;
  }

  @Override
  public int describeContents() {
      return 0;
  }

  @Override
  public void writeToParcel(Parcel dest, int flags) {
      dest.writeString(name);
      dest.writeString(path);
      dest.writeString(size);
      dest.writeString(format);
      dest.writeString(artist);
      dest.writeLong(modifyTime);
      dest.writeLong(id);
      dest.writeLong(album);
      dest.writeInt(_duration);

  }

  public static final Parcelable.Creator<BaseData> CREATOR = new Parcelable.Creator<BaseData>() {
      @Override
      public BaseData createFromParcel(Parcel source) {
          BaseData file = new BaseData(1);
          file.name = source.readString();
          file.path = source.readString();
          file.size = source.readString();
          file.format = source.readString();
          file.artist = source.readString();
          file.modifyTime = source.readLong();
          file.id = source.readLong();
          file.album = source.readLong();
          file._duration = source.readInt();

          return file;
      }

      @Override
      public BaseData[] newArray(int size) {
          return new BaseData[size];
      }
  };

}


5、gridview.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/btnSwitch"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" >

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:orientation="horizontal" >

            <Button
                android:id="@+id/btnleft"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="lastPage" >
            </Button>

            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="horizontal" >

                <TextView
                    android:id="@+id/xthGridPage"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="20dp" />

                <TextView
                    android:id="@+id/middleLine"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="/" />

                <TextView
                    android:id="@+id/totalGridPage"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginRight="20dp" />
            </LinearLayout>

            <Button
                android:id="@+id/btnRight"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="nextPage" />
        </LinearLayout>

        <GridView
            android:id="@+id/gridView1"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:columnWidth="70dp"
            android:descendantFocusability="blocksDescendants"
            android:focusable="false"
            android:gravity="center"
            android:horizontalSpacing="50dp"
            android:listSelector="@drawable/list_selector2"
            android:numColumns="3"
            android:stretchMode="columnWidth"
            android:verticalSpacing="10dp" />
    </LinearLayout>

</LinearLayout>

6、grid_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="vertical"
	android:layout_width="fill_parent"
	android:layout_height="fill_parent">
	
	<ImageView android:id="@+id/img"
		android:layout_width="48dip"
		android:layout_height="48dip"
		android:layout_margin="5dip"/>
	
	<TextView android:id="@+id/title"
			android:layout_width="fill_parent"
			android:layout_height="wrap_content"
			android:textColor="#FFFFFFFF"
			android:textSize="20dip" />
		
	<TextView android:id="@+id/info"
			android:layout_width="wrap_content"
			android:layout_height="wrap_content"
			android:textColor="#FFaaaaaa"
			android:textSize="16dip"
			android:layout_alignParentRight="true" />
		
	
</LinearLayout>

7、values文件夹下的arrays.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string-array name="filename_filter">

        <!--
        1.MP3、WMA、AAC、OGG、PCM、M4A、AC3、WAV、RM、CD、AMR、MP2、APE、DTS、DD+

        2.Sony ATRAC3、Dobly HD、FLAC、MPA//1.MPEG1/2 Layer1/2  2.LPCM/ADPCM;MP3;Dolby(AC-3)

        3.DD+

        4.AAC;HE-AAC;WMA7/8/9

        5.DTS;Dolby HD(True HD)//.mp3, .mp2, .asf, .wav, .wma, .ra


        -->
        <item>.mp3</item>
        <item>.wma</item>
        <item>.aac</item>
        <item>.ogg</item>
        <item>.pcm</item>
        <item>.m4a</item>
        <item>.ac3</item>
        <item>.ec3</item>
        <item>.dtshd</item>
        <item>.wav</item>
        <item>.rm</item>
        <item>.ra</item>
        <item>.cd</item>
        <item>.amr</item>
        <item>.mp2</item>
        <item>.ape</item>
        <item>.dts</item>
        <item>.flac</item>
        <item>.midi</item>
        <item>.snd</item>
        <item>.vqf</item>
        <item>.aiff</item>
        <item>.cda</item>
        <!--
        1.MPEG2、MPEG4、RM、RMVB、MOV、WMV9、3GP、MKV、AVI、ASF、TS、TP、MPEG-PS、VOB、M2TS、M2V、OGG、FLV

        2.DIVX6.x、MSVC/CRAM、MP42 GMC、IV32、RLE、cvid、RV20//MPEG1/2/4、H.264、VC1、RM/RMVB、Xvid、VP6、VP8、

          Flash10.1//VP6/VP8/MVC/VC1/Divx3/4/5/6 /Xvid HD /FLASH7/8/9(.flv) /FLASH7/8/9(.Swf) AVS HD MPEG-2 MPEG-4 H.264

          RM/RMVB//.avi、.asf、.wmv、.m2t、.ts、.mpg、.m2p、.mp4、.flv、.swf、.vob、.mkv、.divx、.xvid、.mov、.rmvb、.rv、.3gp


        -->
        <item>.avi</item>
        <item>.asf</item>
        <item>.wmv</item>
        <item>.m2t</item>
        <item>.mts</item>
        <item>.ts</item>
        <item>.mpg</item>
        <item>.m2p</item>
        <item>.mp4</item>
        <item>.flv</item>
        <item>.swf</item>
        <item>.vob</item>
        <item>.mkv</item>
        <item>.divx</item>
        <item>.xvid</item>
        <item>.mov</item>
        <item>.rmvb</item>
        <item>.rv</item>
        <item>.3gp</item>
        <item>.dat</item>
        <item>.pmp</item>
        <item>.tp</item>
        <!--
        1.JPG、JPEG、PNG、BMP、GIF、TIFF

        2.pcx, tga, exif, fpx, svg, psd, cdr, pcd, dxf, ufo, eps, ai,

          raw//yes(<=17M,<=7680*4320//JPG/BMP/PNG/GIF/TIFF/DNG(hardware jpeg)//.jpg, .png, .bmp, .gif


        -->
        <item>.jpg</item>
        <item>.jpeg</item>
        <item>.png</item>
        <item>.bmp</item>
        <item>.gif</item>
        <item>.tiff</item>
        <!-- <item>.pcx</item> -->
        <item>.tga</item>
        <item>.exif</item>
        <item>.fpx</item>
        <item>.svg</item>
        <item>.psd</item>
        <item>.cdr</item>
        <item>.pcd</item>
        <item>.dxf</item>
        <item>.ufo</item>
        <item>.eps</item>
        <item>.raw</item>
        <item>.mpo</item>
        <!-- other 1. .iso -->
        <item>.iso</item>
        <item>.ssif</item>
    </string-array>
    <string-array name="audio_filter">
        <item>.mp3</item>
        <item>.wma</item>
        <item>.aac</item>
        <item>.ogg</item>
        <item>.pcm</item>
        <item>.m4a</item>
        <item>.ac3</item>
        <item>.ec3</item>
        <item>.dtshd</item>
        <item>.ra</item>
        <item>.wav</item>
        <item>.cd</item>
        <item>.amr</item>
        <item>.mp2</item>
        <item>.ape</item>
        <item>.dts</item>
        <item>.flac</item>
        <item>.midi</item>
        <item>.mid</item>
    </string-array>
    <string-array name="video_filter">
        <item>.avi</item>
        <item>.asf</item>
        <item>.wmv</item>
        <item>.m2t</item>
        <item>.mts</item>
        <item>.ts</item>
        <item>.mpg</item>
        <item>.m2p</item>
        <item>.mp4</item>
        <item>.flv</item>
        <item>.swf</item>
        <item>.vob</item>
        <item>.mkv</item>
        <item>.divx</item>
        <item>.xvid</item>
        <item>.mov</item>
        <item>.rmvb</item>
        <item>.rv</item>
        <item>.3gp</item>
        <item>.3g2</item>
        <item>.dat</item>
        <item>.pmp</item>
        <item>.tp</item>
        <item>.trp</item>
        <item>.rm</item>
        <item>.webm</item>
        <item>.m2ts</item>
        <item>.ssif</item>
        <item>.mpeg</item>
        <item>.mpe</item>
        <item>.m3u8</item>
        <item>.iso</item>
        <item>.bdmv</item>
        <item>.m4v</item>
        <item>.mka</item>
    </string-array>
    <string-array name="photo_filter">
        <item>.jpg</item>
        <item>.jpeg</item>
        <item>.png</item>
        <item>.bmp</item>
        <item>.gif</item>
        <item>.tiff</item>
        <!--  <item>.tif</item> -->
        <!--   <item>.pcx</item> -->
        <item>.tga</item>
        <item>.exif</item>
        <item>.fpx</item>
        <item>.svg</item>
        <item>.psd</item>
        <item>.cdr</item>
        <item>.pcd</item>
        <item>.dxf</item>
        <item>.ufo</item>
        <item>.eps</item>
        <item>.raw</item>
        <item>.mpo</item>
        <!-- <item>tif</item>> -->
    </string-array>

    <array name="package_filter">
        <item>.jar</item>
        <item>.zip</item>
        <item>.rar</item>
        <item>.gz</item>
    </array>
    <array name="text_filter">
        <item>.txt</item>
        <item>.htm</item>
        <item>.html</item>
        <item>.php</item>
        <item>.css</item>
        <item>.xml</item>
        <item>.js</item>
    </array>

</resources>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值