您的位置:首页 > 移动开发 > Android开发

Android笔记:列出指定目录下的文件(音乐列表为例),多选删除文件,单选播放音乐

2016-11-16 10:55 537 查看
因项目需要用到这个功能,感觉还是有必要做个笔记的,先看效果:

打开直接进入到文件列表:



点击选择,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 音乐 listview
相关文章推荐