亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android怎么實現文件資源管理器

發布時間:2022-03-29 09:07:14 來源:億速云 閱讀:339 作者:iii 欄目:開發技術

這篇“Android怎么實現文件資源管理器”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Android怎么實現文件資源管理器”文章吧。

先做需求分析(實現的功能):

1.ListView開始顯示sdcard目錄下的子目錄和文件。

2.點擊文件,Toast顯示“點擊的是文件”

3.點擊目錄,進入子目錄,顯示子目錄下的子目錄和文件。

4.back鍵回退到上層目錄。

5.異常情況處理:

     5.1如果sdcard沒有插入,則不顯示列表,且提示用戶應該插入sdcard后操作

     5.2不允許進入sdcard的上層目錄

下面開始實現:

布局有兩個:

1.主布局:file_list.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".FileExplorerActivity" >
    <TextView 
        android:id="@+id/currentTv"
        android:layout_alignParentTop="true"
        android:clickable="true"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
    <ListView 
        android:id="@+id/fileLv"
        android:layout_below="@id/currentTv"
        android:layout_alignParentBottom="true"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        
    </ListView>
    
</RelativeLayout>

布局很簡單,就是放置了一個ListView控件,這里要注意的是,ListView標簽下不能再放入其他的子控件。內容是通過子布局和Adapter來顯示的。

2.ListView中的子布局file_list_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >
    <ImageView 
        android:id="@+id/icon"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />
    <TextView
        android:id="@+id/filename"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
 
</LinearLayout>

子布局也很簡單,就是在水平方向上左邊顯示一個圖標,用來顯示文件夾或文件圖標,右邊顯示文件名。

3.Activity代碼(功能點寫在注釋中)

public class FileExplorerActivity extends Activity {
    //Adapter中ICON和Filename鍵值對常量
    private static final String ICON = "icon";
    private static final String FILENAME = "filename";
    private TextView currentTv;//ListView上顯示當前路徑的TextView
    private ListView fileLv;//文件列表顯示的ListView
    SimpleAdapter adapter;//適配器
    private List<HashMap<String, Object>> data;//填充的數據
    private File root;//文件夾根節點
    private File[] currentFiles; //根節點下的所有文件(包括文件夾)
    private File currentPath;//記錄當前節點
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_file_explorer);
        
        currentTv = (TextView)findViewById(R.id.currentTv);
        fileLv = (ListView)findViewById(R.id.fileLv);
        
        //得到根節點root -->/mnt/sdcard
        root = getFileSystemRoot();
        //得到第一屏的信息
        if(root != null){
            //從/mnt/sdcard下得到文件列表
            data = getFileListFromSdcard(root);
        }else{
            //如果沒有掛載sdcard,則提示用戶
            data = new ArrayList<HashMap<String, Object>>();
            HashMap<String, Object> map = new HashMap<String, Object>();
            map.put(ICON, R.drawable.none);
            map.put(FILENAME, "逗我玩啊,插卡啊");
            data.add(map);
        }
        //創建Adapater
        adapter = new SimpleAdapter(
                    this, 
                    data, 
                    R.layout.file_list_item, 
                    new String[]{ICON, FILENAME}, 
                    new int[]{R.id.icon, R.id.filename});
        
        fileLv.setAdapter(adapter);
        //綁定事件
        fileLv.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                //點擊listview 項時,如果是目錄,則進入下一層次,如果是文件,不做處理
                File currentPosFile = currentFiles[position];
                if(currentPosFile.isDirectory()){
                    getFileListFromSdcard(currentPosFile);
                }else{
                    Toast.makeText(FileExplorerActivity.this, "您點擊的是文件夾", Toast.LENGTH_LONG).show();
                }
            }
        });
    }
 
    /**
     * 攔截back鍵返回
     * @return
     */
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if(KeyEvent.KEYCODE_BACK == keyCode){
            File parentFile = currentPath.getParentFile();
            //不能超過最頂層
            try {
                if(parentFile.getCanonicalPath().toString().equals("/mnt")){
                    Toast.makeText(this, "別按了,到家了", Toast.LENGTH_LONG).show();
                    return true;
                }else{
                    getFileListFromSdcard(parentFile);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return super.onKeyDown(keyCode, event);
    }
    private File getFileSystemRoot() {
        //首先得到Sd卡是否加載了
        if(Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())){
            //得到sd卡路徑 root --> /mnt/sdcard
            root = Environment.getExternalStorageDirectory();
        }else{
            Toast.makeText(this, "逗我玩啊,插卡啊", Toast.LENGTH_LONG).show();
        }
        return root;
    }
 
    /**
     * 得到Sdcard中的文件列表
     * @return
     */
    private List<HashMap<String, Object>> getFileListFromSdcard(File root) {
        try {
            currentPath = root;
            currentTv.setText(root.getCanonicalPath().toString());
        } catch (IOException e) {
            e.printStackTrace();
        }
        List<HashMap<String, Object>> list = new ArrayList<HashMap<String, Object>>();
        currentFiles = root.listFiles();//列出當前目錄下的所有文件和目錄
        for(File f : currentFiles){
            HashMap<String, Object> map = new HashMap<String, Object>();
            String fileName = f.getName();
            int icon;
            if(f.isDirectory()){
                icon = R.drawable.dir;
                map.put(ICON, icon);
            }else if(f.isFile()){
                icon = R.drawable.file;
                map.put(ICON, icon);
            }
            map.put(FILENAME, fileName);
            list.add(map);
        }
        //把原來的data list清空,然后把list放進去,再通知adapter
        if(data != null){
            data.clear();
            data.addAll(list);
            adapter.notifyDataSetChanged();
        }
        return list;
    }
}

運行效果:

Android怎么實現文件資源管理器

功能展望:

以上代碼是通過精簡功能達到的,如果要增加以下功能也是相當之簡單的:

1.文件夾和文件的刪除功能

2.文件夾和文件的重命名功能

3.文件的分類調用App查看功能

4.文件詳細信息顯示功能

以上就是關于“Android怎么實現文件資源管理器”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

游戏| 玛多县| 仁怀市| 松原市| 左权县| 大荔县| 正安县| 霍林郭勒市| 磴口县| 镇平县| 乐山市| 应城市| 安西县| 大庆市| 上虞市| 泗水县| 龙口市| 措美县| 察雅县| 桓台县| 信宜市| 平山县| 北京市| 加查县| 舞钢市| 惠安县| 阳泉市| 隆德县| 新津县| 容城县| 绿春县| 遂昌县| 略阳县| 阜新市| 岚皋县| 锡林浩特市| 麻阳| 博爱县| 洛川县| 广平县| 南部县|