2010-12-02

mediaplayerを作ってみる(8)-3

    public void onNothingSelected(AdapterView<?> arg0) {
        // TODO 自動生成されたメソッド・スタブ
       
    }
前回の最後にも追記しておきましたが、一応。忘れてました。
なんかよく分かりませんが、eclipseに言われたので。

で、修正。してみました。今後への布石も兼ねて。
なので、(9)ではなく(8)-3です。

まずは、MusicPlayer。フィールドは、

private String musicDirName; 削除。

    private ArrayList<String> dirList;
    private int dirNum;

追加。 コンストラクタに

dirNum = 0; 追加。フィールドで初期化でもいいような・・・。

で、ゲッター、セッターが

    public ArrayList<String> getMusicList() {
        return musicList;
    }
   
    public void setMusicList(ArrayList<String> array) {
        musicList = array;
    }
   
    public void setDirList(ArrayList<String> array) {
        dirList = array;
    }
   
    public void setListView(ListView lv) {
        listView = lv;
    }
   
    public int getDirNum() {
        return dirNum;
    }
   
    public void setDirNum(int n) {
        dirNum = n;
    }
   
    public int getMusicNum() {
        return musicNum;
    }
   
    public void setMusicNum(int num) {
        musicNum = num;
    }

追加じゃなくて、全部でこれだけ。要らないのもあるかも。
あまり気にしない。ほいで、playMusicの中を一部変更。

          listView.clearChoices();
        //再生中の曲のディレクトリと表示されてるディレクトリが同じなら
        if (dirNum == SDMediaPlayerActivity.getSpinnerPosition()) {
            listView.setItemChecked(musicNum, true);
            if (musicNum == 0) listView.setSelection(musicNum);
            else listView.setSelection(musicNum - 1);
        }
       
        try{
            super.setDataSource(dirList.get(dirNum)
                    + FILE_SEP + musicList.get(musicNum));

こんな感じに変更。敢えて分かりにくく。なんとなく。
 そいで、Activity。フィールドから
変更    private ArrayList<String> musicFileList;//musicPlayer用ファイルのリスト
追加
    private ArrayList<String> fileListForListView;//listView用ファイルリスト
private boolean startFlag;//1曲目用
    private static int spinnerPosition;//表示されているディレクトリの番号。static。

onCreate内

musicDirList = dlm.dirListMaker(dirList, "mp3"); の下に
        dirList = null; 追加。いや、なんとなく。もう要らないので。

         //musicFileListの生成
        musicFileList = new ArrayList<String>(); 削除。


        //fileListForListViewの生成
        fileListForListView = new ArrayList<String>(); 追加。と言うか変更。


startFlag = false; 追加。

それから、

    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
        //選択されたアイテムの取得。
        musicDirName = musicDirList.get(position);
        spinnerPosition = position;
       
        //リストの詰め替え準備
        fileListForListView.clear();
        //リストの詰め替え
        flm.fileListMaker(musicDirName, "mp3", fileListForListView);
        if (musicFileList == null) {
            musicFileList = new ArrayList<String>();
            for (String fileName : fileListForListView){
                musicFileList.add(fileName);
            }
        }
        //listViewの変更
        listView.setAdapter(listAdapter);

        //色々通知。
        musicPlayer.setDirList(musicDirList);
        musicPlayer.setMusicList(musicFileList);
        musicPlayer.setListView(listView);
       
        //再生中の曲のディレクトリと同じだったら
//タイトルの色を変えてリストの2番目に持ってくる。
        if (spinnerPosition == musicPlayer.getDirNum() && startFlag) {
            listView.clearChoices();
            listView.setItemChecked(musicPlayer.getMusicNum(), true);
            if (musicPlayer.getMusicNum() == 0)
                        listView.setSelection(musicPlayer.getMusicNum());
            else listView.setSelection(musicPlayer.getMusicNum() - 1);
        }
    }

に変更。長くなり始めてる。今後もっと長くなるかも。
 も一つ。onItemClick内に

startFlag = true;//1曲目なんか選択されたら。それだけのため。

追加。まだまだ。onClickStartを

    public void onClickStart(View view) {
       
        if (!musicPlayer.isPlaying()){
           
            //停止中にlistViewで曲変更した場合
            if (changeMusicFlag) {
               
                if (spinnerPosition != musicPlayer.getDirNum()) {
                    musicFileList.clear();
                    for (String fileName : fileListForListView) {
                        musicFileList.add(fileName);
                    }
                    musicPlayer.setDirNum(spinnerPosition);
                }

                musicPlayer.setMusicNum(listPosition);
                musicPlayer.playMusic();
                changeMusicFlag = false;
            }
           
            if (pauseFlag) {    //一時停止中なら
               
                musicPlayer.start();
                pauseFlag = false;
               
            } else {
                if (startFlag) {
                    musicPlayer.playMusic();
                    changeMusicFlag = false;
                }
            }
        }
        //再生中で曲選択が変わってたら。つまり、listViewで選択した場合です。
        if (changeMusicFlag && musicNum_listClicked ==
                    musicPlayer.getMusicNum()) {   

            if (spinnerPosition != musicPlayer.getDirNum()) {
                musicFileList.clear();
                for (String fileName : fileListForListView) {
                    musicFileList.add(fileName);
                }
                musicPlayer.setDirNum(spinnerPosition);
            }

            musicPlayer.setMusicNum(listPosition);
            musicPlayer.playMusic();
            changeMusicFlag = false;           
        } else {
            changeMusicFlag = false;
        }
    }

どこと書くのが、面倒なくらい変更。したような気がしたので。全部載せときます。
 最後に、

    public static int getSpinnerPosition() {
        return spinnerPosition;
    }

staticなメソッド。たぶん合ってると思う。staticで。あまり使いたくない。static。
なんとなく。static final は好きだけど。なんとなく。

java。というか、参照とかを意識してなかったのが良くなかったと思う。
たぶん。まあ、なんかよく分かってないけど。

次も、地味に変更予定。ディレクトリをまたいでの連続再生は後回し。
まあ、予定は未定。

0 件のコメント:

コメントを投稿