Android开发之文件浏览器
来源:互联网 发布:输入法设置软件 编辑:程序博客网 时间:2024/05/22 12:00
源码下载地址:
http://download.csdn.net/detail/nuptboyzhb/4485545
该文件浏览器极易扩展,文件浏览器实现的功能是:主UI显示用户选择的文件的路径。
完成这一功能的主要是FXExplore.java文件。如下图解析:
主SelectFilesActivity.java文件
package com.example.com.njupt.zhb.selectfiles;import android.os.Bundle;import android.app.Activity;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.util.Log;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;import android.widget.Toast;/* @作者:郑海波 http://blog.csdn.net/nuptboyzhb */public class SelectFilesActivity extends Activity { private Button selectBtn; private TextView pathView; private static final String DYNAMICACTION = "njupt.zhb.sendpath"; private OnClickListener listener=null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_select_files); listener=new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubIntent intent=new Intent(SelectFilesActivity.this,FSExplorer.class);startActivity(intent);}};selectBtn=(Button)findViewById(R.id.selectFilesBtn);pathView=(TextView)findViewById(R.id.filepath);selectBtn.setOnClickListener(listener);IntentFilter filter_dynamic = new IntentFilter();filter_dynamic.addAction(DYNAMICACTION);registerReceiver(dynamicReceiver, filter_dynamic); } // 2 自定义动态广播接收器,内部类,接收选择的路径 private BroadcastReceiver dynamicReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { Log.e("MainActivity", "接收自定义动态注册广播消息"); if(intent.getAction().equals(DYNAMICACTION)){ String path = intent.getStringExtra("path"); Toast.makeText(context, path, Toast.LENGTH_SHORT).show(); String text="Path:"+path; pathView.setText(text); } } }; @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_select_files, menu); return true; }}
FXExplore.java文件
package com.example.com.njupt.zhb.selectfiles;import java.io.File;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import android.R.string;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.util.Log;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.widget.AdapterView;import android.widget.ListView;import android.widget.SimpleAdapter;import android.widget.Toast;import android.widget.AdapterView.OnItemClickListener;/*@作者:郑海波 http://blog.csdn.net/nuptboyzhb参考:Google Android开发入门与实战*/public class FSExplorer extends Activity implements OnItemClickListener {private static final String TAG = "FSExplorer";private static final int IM_PARENT = Menu.FIRST + 1;private static final int IM_BACK = IM_PARENT + 1;private static final String DYNAMICACTION = "njupt.zhb.sendpath";ListView itemlist = null;String path = "/";List<Map<String, Object>> list;public void sendPathToActivity(String path){Intent intent = new Intent();intent.setAction(DYNAMICACTION);intent.putExtra("path", path);sendBroadcast(intent);}@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.files);setTitle("文件浏览器");itemlist = (ListView) findViewById(R.id.itemlist);refreshListItems(path);} /*根据path更新路径列表*/private void refreshListItems(String path) {setTitle("文件浏览器 > "+path);list = buildListForSimpleAdapter(path);SimpleAdapter notes = new SimpleAdapter(this, list, R.layout.file_row,new String[] { "name", "path" ,"img"}, new int[] { R.id.name,R.id.desc ,R.id.img});itemlist.setAdapter(notes);itemlist.setOnItemClickListener(this);itemlist.setSelection(0);} /*根据路径生成一个包含路径的列表*/private List<Map<String, Object>> buildListForSimpleAdapter(String path) {File[] files = new File(path).listFiles();List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(files.length);Map<String, Object> root = new HashMap<String, Object>();root.put("name", "/");root.put("img", R.drawable.file_root);root.put("path", "go to root directory");list.add(root);Map<String, Object> pmap = new HashMap<String, Object>();pmap.put("name", "..");pmap.put("img", R.drawable.file_paranet);pmap.put("path", "go to paranet Directory");list.add(pmap);for (File file : files){Map<String, Object> map = new HashMap<String, Object>();if(file.isDirectory()){map.put("img", R.drawable.directory);}else{map.put("img", R.drawable.file_doc);}map.put("name", file.getName());map.put("path", file.getPath());list.add(map);}return list;}/*跳转到上一层*/private void goToParent() {File file = new File(path);File str_pa = file.getParentFile();if(str_pa == null){Toast.makeText(FSExplorer.this,"已经是根目录",Toast.LENGTH_SHORT).show();refreshListItems(path);}else{path = str_pa.getAbsolutePath();refreshListItems(path);}} /*实现OnItemClickListener接口*/@Overridepublic void onItemClick(AdapterView<?> parent, View v, int position, long id) {Log.i(TAG, "item clicked! [" + position + "]");if (position == 0) {path = "/";refreshListItems(path);}else if(position == 1){goToParent();} else {path = (String) list.get(position).get("path");File file = new File(path);if (file.isDirectory())refreshListItems(path);else{Toast.makeText(FSExplorer.this,path,Toast.LENGTH_SHORT).show();sendPathToActivity(path);finish();}}}}
Files.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"><ListView android:layout_width="fill_parent"android:layout_height="fill_parent" android:id="@+id/itemlist" /></LinearLayout>
File_row.xml文件
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/vw1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:padding="4px" android:orientation="horizontal"> <ImageView android:id="@+id/img" android:layout_width="32px" android:layout_margin="4px" android:layout_height="32px"/> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical"> <TextView android:id="@+id/name" android:textSize="18sp" android:textStyle="bold" android:layout_width="fill_parent" android:layout_height="wrap_content"/> <TextView android:id="@+id/desc" android:textSize="14sp" android:layout_width="fill_parent" android:paddingLeft="10px" android:layout_height="wrap_content"/> </LinearLayout></LinearLayout>
AndroidManifest.xml文件
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.com.njupt.zhb.selectfiles" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="15" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".SelectFilesActivity" android:label="@string/title_activity_select_files" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".FSExplorer"> </activity> </application></manifest>
- Android开发之文件浏览器
- Android开发之文件浏览器
- Android之文件浏览器
- Android文件浏览器的开发
- Android开发之图片浏览器
- Android开发之图片浏览器
- Android开发之启动android默认浏览器
- Android之SD卡文件浏览器
- Android之SD卡文件浏览器实现
- Android开发之文件下载
- android 开发之文件下载
- Android开发之读写文件
- Android开发之文件下载
- android 开发之文件下载
- Android开发之文件存储
- Android开发之文件下载
- Android开发之-------文件存储
- Android初学之第一个Android程序:文件浏览器
- IntPtr和string的相互转化
- Android入门/GirdView(九)
- Android中的Broadcast Action大全
- iphone定位城市
- 安全增强 Linux (SELinux) 剖析
- Android开发之文件浏览器
- Python基础教程——8 异常
- 【DP(背包)】 hdu2955 Robberies
- 软件项目外包之路何以如此坎坷?
- Unix/Linux fork()函数的理解
- android ui开发的一些展望
- 将GRUB输出重定向到串口
- 利用ProEssentials OCX画图
- 戏说Android view 工作流程《上》