-1

如何在 android 中使用存储卡中的目录和文件填充 ListView。请推荐一些链接或书籍。

4

3 回答 3

3

试试这个页面:http ://android-er.blogspot.hu/2010/01/implement-simple-file-explorer-in.html

复制代码,如果链接将来会死:

行.xml

<TextView 

  xmlns:android="http://schemas.android.com/apk/res/android"

  android:id="@+id/rowtext"

  android:layout_width="fill_parent"

     android:layout_height="25px"

     android:textSize="23sp" />

主.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"

    >

<TextView

 android:id="@+id/path"

    android:layout_width="fill_parent" 

    android:layout_height="wrap_content" 

    />

<ListView

 android:id="@android:id/list"

 android:layout_width="fill_parent" 

    android:layout_height="wrap_content" 

 />

<TextView

 android:id="@android:id/empty"

 android:layout_width="fill_parent" 

    android:layout_height="wrap_content" 

    android:text="No Data"

 />

</LinearLayout>

AndroidExplorer.java:

package com.AndroidExplorer;



import java.io.File;

import java.util.ArrayList;

import java.util.List;

import android.app.AlertDialog;

import android.app.ListActivity;

import android.content.DialogInterface;

import android.os.Bundle;

import android.view.View;

import android.widget.ArrayAdapter;

import android.widget.ListView;

import android.widget.TextView;



public class AndroidExplorer extends ListActivity {



 private List<String> item = null;

 private List<String> path = null;

 private String root="/";

 private TextView myPath;



    /** Called when the activity is first created. */

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        myPath = (TextView)findViewById(R.id.path);

        getDir(root);

    }



    private void getDir(String dirPath)

    {

     myPath.setText("Location: " + dirPath);



     item = new ArrayList<String>();

     path = new ArrayList<String>();



     File f = new File(dirPath);

     File[] files = f.listFiles();



     if(!dirPath.equals(root))

     {



      item.add(root);

      path.add(root);



      item.add("../");

      path.add(f.getParent());



     }



     for(int i=0; i < files.length; i++)

     {

       File file = files[i];

       path.add(file.getPath());

       if(file.isDirectory())

        item.add(file.getName() + "/");

       else

        item.add(file.getName());

     }



     ArrayAdapter<String> fileList =

      new ArrayAdapter<String>(this, R.layout.row, item);

     setListAdapter(fileList);

    }



 @Override

 protected void onListItemClick(ListView l, View v, int position, long id) {



  File file = new File(path.get(position));



  if (file.isDirectory())

  {

   if(file.canRead())

    getDir(path.get(position));

   else

   {

    new AlertDialog.Builder(this)

    .setIcon(R.drawable.icon)

    .setTitle("[" + file.getName() + "] folder can't be read!")

    .setPositiveButton("OK", 

      new DialogInterface.OnClickListener() {



       @Override

       public void onClick(DialogInterface dialog, int which) {

        // TODO Auto-generated method stub

       }

      }).show();

   }

  }

  else

  {

   new AlertDialog.Builder(this)

    .setIcon(R.drawable.icon)

    .setTitle("[" + file.getName() + "]")

    .setPositiveButton("OK", 

      new DialogInterface.OnClickListener() {



       @Override

       public void onClick(DialogInterface dialog, int which) {

        // TODO Auto-generated method stub

       }

      }).show();

  }

 }

}
于 2013-06-13T10:48:55.573 回答
1

你可以做一个快速的谷歌搜索。是执行此操作的分步教程。

于 2013-06-13T10:51:33.343 回答
0

这个链接:

使用java.io.File类从目录中读取文件:

String dirPath = "some directory full path goes here";
File f = new File(dirPath);
File[] files = f.listFiles(); 

然后,您可以在同一链接中完成您的教程,该链接列出了ListView.

有关ListView填充的另一个快速链接,您可以尝试Vogella 教程


编辑:

如果您是 Android 新手(从您的帖子中您也可能是),请尝试来自Lars Vogel的一些教程。它们写得很好,很容易理解。

于 2013-06-13T10:49:17.867 回答