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

因项目需要用到这个功能,感觉还是有必要做个笔记的,先看效果:
打开直接进入到文件列表:
这里写图片描述
点击选择,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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值