同福

使用 GridView 显示文件夹列表

介绍

介绍

在 android 的 app 程序里面,可以通过 GridView 控件将一组内容以网格形式显示出来

今天我们就来学习 GridView 的使用方法

教程

布局

GridView

我们需要在 activity_main 里放一个 GridView 控件

<GridView
    android:id="@+id/gridview"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_margin="10dp"
    android:background="#ffffff"
    android:columnWidth="160dp"
    android:numColumns="auto_fit"
    android:verticalSpacing="10dp"
    android:horizontalSpacing="10dp"/>

ListItem

我们需要建立一个新的 layout 布局,布局名称是 list_item,在里面放上 ImageView 和 TextView,用来显示图标和标题

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:background="#ffffff"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

    <ImageView
        android:id="@+id/img_item"
        android:src="@mipmap/ic_launcher"
        android:layout_width="160dp"
        android:layout_height="160dp"
        android:scaleType="centerCrop"/>

    <TextView
        android:id="@+id/txt_item"
        android:textColor="#000000"
        android:text="文字区域"
        android:layout_width="160dp"
        android:layout_height="22dp"
        android:textSize="16dp"
        android:textAlignment="center"/>

</LinearLayout>

代码

属性

我们需要下面几个属性

  • dirs:文件夹列表

  • gridView:网格控件

  • dataList:数据集合

  • gridViewAdapter:网格适配器

private String[] dirs;
private GridView gridView;
private java.util.List<Map<String, Object>> dataList;
private SimpleAdapter gridViewAdapter;

采集数据

通过下面的代码采集路径下的文件夹列表

File dir;
Integer i, l, fl;
dir = new File(dirAbsPath);
File[] subFile = dir.listFiles();
l = subFile.length;
if(l > 0){
    fl = 0;

    // count tfij
    for(i=0;i<l;i++){
        if(subFile[i].isDirectory()){
            fl ++;
        }
    }
    // save tfij
    dirs = new String[fl];
    fl = 0;
    for(i=0;i<l;i++){
        if(subFile[i].isDirectory()){
            dirs[fl] = subFile[i].getName();
            fl ++;
        }
    }
}

装载数据

通过下面的代码将 dataList 里的数据装载到 gridView 里

dataList = new ArrayList<Map<String, Object>>();
if(dirs != null){
    for(int i=0;i<dirs.length;i++){
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("img", R.mipmap.ic_launcher);
        map.put("txt", dirs[i]);
        dataList.add(map);
    }
}
gridViewAdapter = new SimpleAdapter(this, dataList, R.layout.list_item, new String[]{"img", "txt"}, new int[]{R.id.img_item, R.id.txt_item});
gridView.setAdapter(gridViewAdapter);

设置点击事件

为用户点击网格内的图标的动作增加事件处理

gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        String a = String.format("pos: %d, id: %d, name:%s", position, id, dirs[position]);
        Toast.makeText(getApplication(), a, Toast.LENGTH_SHORT).show();
    }
});

总结

我们这样就完成了一个可以展示路径下的文件夹列表的功能了