android学习笔记(一) 遍历SD卡中所有文件并在listview中显示

有关android SD卡操作中,遍历是最简单且最基础常用的操作。

 

下面就来实现遍历sd卡中所有文件,并且用一个ListView显示出来。

 

首先,了解一下ListView的用法。

 

android document中的解释:

A view that shows items in a vertically scrolling list. The items come from the ListAdapter associated with this view.

 

也就是说 listview是将一个ListAdapter的内容用图像显示出来, 

所以我们可以用一个SimpleAdapter来保存SD卡遍历的结果。

 

 

而我们知道linux文件系统是一颗单独的树(没有森林)。所以从根目录进行一次深搜就能访问所有节点。

 

 

而android SD卡的根目录为"/sdcard"。

 

 

 

 

调用getAllFiles(new File("/sdcard"))后所有文件保存在list中。

 

 

下面就是在将数据保存到SimpleAdapter中了。

 

查阅android document 其构造函数为:

public SimpleAdapter
 (Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to)

其中

context为 显示listView的activity,

data为 数据,

resource为 listview中每一格单元格的布局xml的位置(res/layout/relative.xml,自己创建)

from 为listview中每一个item中组件(如一个item中含有2个textview--textview1,textview2)所对应的数据源。

to 为 form的数据源对应的item中组件的名称(textview1,textview2)。

 

所以需要将刚才得到的list数据转化成 List<? extends Map<String, ?>>类型

 

以下为转化函数

 

 

 

最后 通过listView 显示 方法为

 

 

listView的布局定义在main.xml中

 

listview中单元格的布局定义在relative.xml中

 

以下是运行效果(读取的sd卡为模拟器中的SD卡,在真机上运行,文件太多,会花费几秒钟时间读取,可以将上述递归遍历改进):

 

 

模拟SD卡 内容 请看我另一篇文章。

 

以下是所有代码(可运行):

 

 

AndroidMainfest.xml中一定要加上

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

 

//testSD.java

 

res/layout/main.xml

 

 

res/layout/relative.xml

 

 

 

 

  • 1
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
首先,你需要创建一个数据库帮助类来处理数据库操作。这个类应该继承自 SQLiteOpenHelper 类,然后实现 onCreate() 和 onUpgrade() 方法。在 onCreate() 方法,你应该创建你的数据库表。在 onUpgrade() 方法,你应该处理升级数据库的操作。 接下来,你需要创建一个数据模型类来表示你的数据表的每一行数据。这个类应该包含一个构造函数和 getter/setter 方法来获取和设置每个列的值。 然后,你需要创建一个适配器类来处理将数据显示ListView 。这个适配器应该继承自 BaseAdapter 类,并实现 getCount()、getItem() 和 getView() 方法。在 getView() 方法,你应该为每个列表项创建一个视图,并将数据填充到这个视图。 最后,你需要在你的 Activity 使用这个适配器来显示数据。你可以使用 findViewById() 方法获取 ListView 组件,并将适配器设置为它的适配器。然后调用适配器的 notifyDataSetChanged() 方法来刷新列表视图。 以下是一个示例代码,用于从数据库获取数据并将其显示ListView : ```java public class MainActivity extends AppCompatActivity { private ListView listView; private MyDatabaseHelper dbHelper; private List<MyDataModel> dataList; private MyListAdapter listAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); dbHelper = new MyDatabaseHelper(this); SQLiteDatabase db = dbHelper.getWritableDatabase(); dataList = new ArrayList<MyDataModel>(); String[] columns = {"col1", "col2", "col3"}; Cursor cursor = db.query("my_table", columns, null, null, null, null, null); while (cursor.moveToNext()) { String col1 = cursor.getString(cursor.getColumnIndex("col1")); String col2 = cursor.getString(cursor.getColumnIndex("col2")); String col3 = cursor.getString(cursor.getColumnIndex("col3")); MyDataModel data = new MyDataModel(col1, col2, col3); dataList.add(data); } cursor.close(); listView = (ListView) findViewById(R.id.list_view); listAdapter = new MyListAdapter(this, dataList); listView.setAdapter(listAdapter); } @Override protected void onDestroy() { super.onDestroy(); dbHelper.close(); } private class MyDatabaseHelper extends SQLiteOpenHelper { private static final String DB_NAME = "my_db"; private static final int DB_VERSION = 1; private static final String CREATE_TABLE = "CREATE TABLE my_table (col1 TEXT, col2 TEXT, col3 TEXT)"; public MyDatabaseHelper(Context context) { super(context, DB_NAME, null, DB_VERSION); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL(CREATE_TABLE); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // handle database upgrade } } private class MyDataModel { private String col1; private String col2; private String col3; public MyDataModel(String col1, String col2, String col3) { this.col1 = col1; this.col2 = col2; this.col3 = col3; } public String getCol1() { return col1; } public void setCol1(String col1) { this.col1 = col1; } public String getCol2() { return col2; } public void setCol2(String col2) { this.col2 = col2; } public String getCol3() { return col3; } public void setCol3(String col3) { this.col3 = col3; } } private class MyListAdapter extends BaseAdapter { private Context context; private List<MyDataModel> dataList; public MyListAdapter(Context context, List<MyDataModel> dataList) { this.context = context; this.dataList = dataList; } @Override public int getCount() { return dataList.size(); } @Override public Object getItem(int position) { return dataList.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { View view = convertView; if (view == null) { LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); view = inflater.inflate(R.layout.list_item, null); } MyDataModel data = dataList.get(position); TextView col1TextView = (TextView) view.findViewById(R.id.col1_text_view); TextView col2TextView = (TextView) view.findViewById(R.id.col2_text_view); TextView col3TextView = (TextView) view.findViewById(R.id.col3_text_view); col1TextView.setText(data.getCol1()); col2TextView.setText(data.getCol2()); col3TextView.setText(data.getCol3()); return view; } } } ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值