如何使用异步任务在简单适配器中加载项?

时间:2016-03-03 18:52:56

标签: android performance listview asynchronous android-adapter

我从SD卡加载歌曲,最初在listview中加载需要时间,在某些移动设备中,应用程序本身也停止了。所以,我计划在Async任务的帮助下加载。 观看了几个使用Array Adapter解释的视频,因为我在这里使用的是Simple适配器,我不知道如何与Async任务合并,我非常感谢任何建议以更快的速度工作app。

有两个部分混淆了应用异步任务的位置:

  1. 它会扫描SD卡上的.mp3文件并加载到列表中。

    public class SongsManager {     // SDCard路径     / final String MEDIA_PATH = Environment.getExternalStorageDirectory()             .getPath()+“/ Download”; /     private ArrayList> songsList = new ArrayList>();

    //final ArrayList<File> mySongs = getPlayList(Environment.getExternalStorageDirectory());
    
    // Constructor
    public SongsManager(){
    
    }
    
    /**
     * Function to read all mp3 files from sdcard
     * and store the details in ArrayList
     * */
    public ArrayList<HashMap<String, String>> getPlayList(File root){
    
        final SongsManager context =  this;
        //File home = new File(MEDIA_PATH);
    
        //File[] files = home.listFiles(new FileExtensionFilter());
        File[] files = root.listFiles();    // All file and folder automatic collect
        if ( files!=null && files.length > 0)
        {
            for (File file : files) {
    
                if (file.isDirectory()) {
                    scanDirectory(file);
                } else {
                    addSongToList(file);
                }
            }
        }
        else
        {
            return null;
            //Toast toast = Toast.makeText(this,"",Toast.LENGTH_SHORT).show();
        }
        // return songs list array
        return songsList;
    }
    private void scanDirectory(File directory) {
        if (directory != null) {
            File[] listFiles = directory.listFiles();
            if (listFiles != null && listFiles.length > 0) {
                for (File file : listFiles) {
                    if (file.isDirectory()) {
                        scanDirectory(file);
                    } else {
                        addSongToList(file);
                    }
    
                }
            }
        }
    }
    
    private void addSongToList(File song) {
        HashMap<String, String> songMap = new HashMap<String, String>();
        try {
            // Adding each song to SongList
            if (accept(song)) {
                songMap.put("songTitle",
                        song.getName().substring(0, (song.getName().length() - 4)));
                songMap.put("songPath", song.getPath());
                songsList.add(songMap);
                System.out.println(songMap);
            }
            else{
                System.out.println("invalid song:"+song.getPath());
            }
        }
        catch(Exception e){e.printStackTrace();}
    }
    
    public boolean accept(File song) {
        return (song.getPath().endsWith(".mp3") || song.getPath().endsWith(".MP3"));
    }
    

    }

  2. 使用简单适配器的Listview。

    if(utils.songsList!= null&amp;&amp; utils.songsList.size()&gt; 0){                 //循环播放列表                 for(int i = 0; i&lt; utils.songsList.size(); i ++){                     //创建新的HashMap                     HashMap song = utils.songsList.get(i);

                    // adding HashList to ArrayList
                    songsListData.add(song);
                }
    
                // Adding menuItems to ListView
                adapter = new SimpleAdapter(this, songsListData,
                        R.layout.playlist_item, new String[]{"songTitle"}, new int[]{
                        R.id.songTitle});
    
    
                setListAdapter(adapter);
    
  3. 请建议我如何使用Async任务或任何其他方式执行此操作。 提前谢谢。

0 个答案:

没有答案