Android笔记:列出指定目录下的文件(音乐列表为例),多选删除文件,单选播放音乐
2016-11-16 10:55
537 查看
因项目需要用到这个功能,感觉还是有必要做个笔记的,先看效果:
打开直接进入到文件列表:
点击选择,listView进入到多选状态:
点击删除的图标,如果已经选中了列表项,则直接删除本地文件并直接更新列表
如果在未选择的状态下点击列表项则开始播放所选项。
接下来直接上代码:
先来看一下这个自定义的Adapter,注释写得比较详细,同时也比较简单,相信大家都可以看明白的,这里就不赘述了。
还有一个类,里面定义了一些必要的属性。直接看代码,里面同样只是一些变量的定义以及set、get方法。
也直接贴上吧
主Activity内容:直接看注释就好。PS:有不明白的地方可以留言讨论。
至此demo完毕;
放上下载地址:
http://download.csdn.net/detail/xiaoyu940601/9684229
打开直接进入到文件列表:
点击选择,listView进入到多选状态:
点击删除的图标,如果已经选中了列表项,则直接删除本地文件并直接更新列表
如果在未选择的状态下点击列表项则开始播放所选项。
接下来直接上代码:
先来看一下这个自定义的Adapter,注释写得比较详细,同时也比较简单,相信大家都可以看明白的,这里就不赘述了。
package com.dfey.cxy.listviewchoose.Adapter; /** * Created by cxy on 2016/11/10. */ import java.util.List; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.CompoundButton.OnCheckedChangeListener; import android.widget.ImageView; import android.widget.TextView; import com.dfey.cxy.listviewchoose.Bean.ItemBean; import com.dfey.cxy.listviewchoose.R; public class MyListAdapter extends BaseAdapter { private LayoutInflater inflater; private List<ItemBean> items; private ItemBean item; private OnShowItemClickListener onShowItemClickListener; public MyListAdapter(List<ItemBean> list,Context context) { items=list; inflater=LayoutInflater.from(context); } @Override public int getCount() { // TODO 自动生成的方法存根 return items.size(); } @Override public Object getItem(int position) { // TODO 自动生成的方法存根 return items.get(position); } @Override public long getItemId(int position) { // TODO 自动生成的方法存根 return items.get(position).getId(); } @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO 自动生成的方法存根 ViewHolder holder;//建议使用ViewHolder,这样呢可以减少内存的使用,代码的复用性比较高 if(convertView==null) { holder=new ViewHolder(); convertView=inflater.inflate(R.layout.item, null); holder.img=(ImageView) convertView.findViewById(R.id.imageView1); holder.cb=(CheckBox) convertView.findViewById(R.id.checkBox1); holder.title=(TextView)convertView.findViewById(R.id.title); holder.poeple=(TextView)convertView.findViewById(R.id.peopleNum); convertView.setTag(holder); }else { holder=(ViewHolder) convertView.getTag(); } item=items.get(position); if(item.isShow()) { holder.cb.setVisibility(View.VISIBLE); } else { holder.cb.setVisibility(View.GONE); } holder.img.setImageResource(item.getImgRes()); holder.title.setText(item.getTitle()); //把文件名直接取过来之后把后缀给去掉".mp3" holder.poeple.setText("创建时间:"+item.getTitle().replace(".mp3","")); holder.cb.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if(isChecked) { item.setChecked(true); } else { item.setChecked(false); } //回调方法,讲item加入已选择的 onShowItemClickListener.onShowItemClick(item); } }); //监听后设置选择状态 holder.cb.setChecked(item.isChecked()); return convertView; } static class ViewHolder { //item布局的内容 ImageView img; CheckBox cb; TextView title,poeple; } public interface OnShowItemClickListener { public void onShowItemClick(ItemBean bean); } public void setOnShowItemClickListener(OnShowItemClickListener onShowItemClickListener) { this.onShowItemClickListener = onShowItemClickListener; } }
还有一个类,里面定义了一些必要的属性。直接看代码,里面同样只是一些变量的定义以及set、get方法。
也直接贴上吧
package com.dfey.cxy.listviewchoose.Bean; /** * Created by cxy on 2016/11/10. */ public class ItemBean { private int imgRes; private String title,time; private int id; private boolean isChecked; private boolean isShow; public boolean isShow() { return isShow; } public void setShow(boolean isShow) { this.isShow = isShow; } public int getId() { return id; } public void setId(int id) { this.id = id; } public boolean isChecked() { return isChecked; } public void setChecked(boolean isChecked) { this.isChecked = isChecked; } public int getImgRes() { return imgRes; } public void setImgRes(int img) { this.imgRes = img; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getTime() { return time; } public void setTime(String time) { this.time = time; } }
主Activity内容:直接看注释就好。PS:有不明白的地方可以留言讨论。
package com.dfey.cxy.listviewchoose; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.os.Environment; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.Button; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.RelativeLayout; import android.widget.Toast; import com.dfey.cxy.listviewchoose.Adapter.MyListAdapter; import com.dfey.cxy.listviewchoose.Bean.ItemBean; import java.io.File; import java.util.ArrayList; import java.util.List; public class MainActivity extends Activity implements MyListAdapter.OnShowItemClickListener { private ListView listView; private List<ItemBean> dataList, selectedList; private List<String> paths, items; private MyListAdapter myAdapter; private RelativeLayout rootView; private LinearLayout menuView; private LinearLayout openView; private static boolean isShow; String rootPath= Environment.getExternalStorageDirectory()+"/下户宝/mRecord/"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); isShow = false; setContentView(R.layout.activity_main); Button delbtn = (Button) findViewById(R.id.del); rootView = (RelativeLayout) findViewById(R.id.rootView); menuView = (LinearLayout) findViewById(R.id.button_group); listView = (ListView) findViewById(R.id.listView1); dataList = new ArrayList<ItemBean>(); selectedList = new ArrayList<ItemBean>(); getFileDir(rootPath); for (int i = 0; i<items.size(); i++) { ItemBean item = new ItemBean(); item.setTitle(items.get(i)); item.setImgRes(R.mipmap.mp3); item.setChecked(false); item.setShow(isShow); dataList.add(item); } myAdapter = new MyListAdapter(dataList, this); myAdapter.setOnShowItemClickListener(MainActivity.this); listView.setAdapter(myAdapter); delbtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO 自动生成的方法存根 showMenu(); isShow = true; selectedList.clear(); for (ItemBean item : dataList) { item.setShow(isShow); } myAdapter.notifyDataSetChanged(); } }); listView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // TODO 自动生成的方法存根 if (isShow) { ItemBean item = dataList.get(position); boolean isChecked = item.isChecked(); if (isChecked) { item.setChecked(false); } else { item.setChecked(true); } myAdapter.notifyDataSetChanged(); } } }); } //显示选择删除等的菜单 private void showMenu() { RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT); lp.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); LayoutInflater inflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); openView = (LinearLayout) inflater.inflate(R.layout.delmenu_layout, null); rootView.removeView(menuView); rootView.addView(openView, lp); final Button sBtn = (Button) openView.findViewById(R.id.selectAll); Button dBtn = (Button) openView.findViewById(R.id.del_button); Button cBtn = (Button) openView.findViewById(R.id.cancel_button); sBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO 自动生成的方法存根 if ("全选".equals(sBtn.getText().toString())) { for (ItemBean bean : dataList) { if (!bean.isChecked()) { bean.setChecked(true); if (!selectedList.contains(bean)) { selectedList.add(bean); } } } myAdapter.notifyDataSetChanged(); sBtn.setText("反选"); } else if ("反选".equals(sBtn.getText().toString())) { for (ItemBean bean : dataList) { bean.setChecked(false); if (!selectedList.contains(bean)) { selectedList.remove(bean); } } myAdapter.notifyDataSetChanged(); sBtn.setText("全选"); } } }); dBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO 自动生成的方法存根 if (selectedList != null && selectedList.size() > 0) { dataList.removeAll(selectedList); myAdapter.notifyDataSetChanged(); selectedList.clear(); } else { Toast.makeText(MainActivity.this, "请选择条目", Toast.LENGTH_SHORT).show(); } } }); cBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO 自动生成的方法存根 if (isShow) { selectedList.clear(); for (ItemBean bean : dataList) { bean.setChecked(false); bean.setShow(false); } myAdapter.notifyDataSetChanged(); isShow = false; restoreView(); } } }); } @Override public void onShowItemClick(ItemBean bean) { // TODO 自动生成的方法存根 if (bean.isChecked() && !selectedList.contains(bean)) { selectedList.add(bean); } else if (!bean.isChecked() && selectedList.contains(bean)) { selectedList.remove(bean); } } private void restoreView() { rootView.addView(menuView); if (openView != null) { rootView.removeView(openView); openView = null; } } public void getFileDir(String filePath) { try { items = new ArrayList<String>(); paths = new ArrayList<String>(); File f = new File(filePath); File [] files = f.listFiles();// 列出所有文件 // 将所有文件存入list中 if (files != null) { int count = files.length;// 文件个数 for (int i = 0; i < count; i++) { File file = files[i]; items.add(file.getName()); paths.add(file.getPath()); } } } catch (Exception ex) { ex.printStackTrace(); } } }
至此demo完毕;
放上下载地址:
http://download.csdn.net/detail/xiaoyu940601/9684229
相关文章推荐
- android删除指定目录下文件及目录
- Androin学习笔记五十:Android 将文件复制到指定目录
- objective-c NSArray 列出指定文件目录列表
- Android--MediaPlayer(实现列表选歌,上一首,下一首,清空播放列表,搜索本地音乐文件)
- objective-c NSArray 列出指定文件目录列表
- android 音乐模仿器demo,实现指定目录下的音乐循环播放,和在线播放的方法。
- Android列表实现单选、多选、全选、取消、删除
- C# 上传文件到指定目录,单击下载文件,删除指定目录文件,打开文件列表
- Android--MediaPlayer(实现列表选歌,上一首,下一首,清空播放列表,搜索本地音乐文件)
- JAVA基础回顾2 遍历指定文件目录 遍历删除目录 指定文件清单列表
- android 遍历根目录获取音乐文件从听筒播放 延迟播放
- Android--MediaPlayer(实现列表选歌,上一首,下一首,清空播放列表,搜索本地音乐文件)
- 我的Android进阶之旅------>Android使用正则表达式匹配扫描指定目录下的所有媒体文件(音乐、图像、视频文件)
- bjective-c NSArray 列出指定文件目录列表
- 当url中未明确指定文件名时,是否列出相关目录下所有文件的开关设置
- Linux 文件和目录管理之列出、删除、复制、移动及改名
- 删除指定目录下的所有文件包括目录
- 删除指定目录下的所有文件的java类
- Linux 文件和目录管理之列出、删除、复制、移动及改名
- [转自LinuxSir.Org]Linux 文件和目录管理之列出、删除、复制、移动及改名