続き。string.xmlから。
<string name="no_title">no title</string>
追加。次、main.xml。レイアウトの一番上に
<Spinner
android:id="@+id/spinner"
android:layout_width="fill_parent"
android:layout_height="30dp"
android:background="@color/red">
</Spinner>
後、TextViewに
android:text="@string/no_title"
追加。なんとなく。次、Activity。
フィールド
private static final String FILE_SEP = File.separator; 削除。
musicListをmusicFileListに変更。名前だけ。
編集→検索/置換で。ただし、すべて置換はやめたほうがいい。
private ArrayList<String> musicDirList;
private MusicListAdapter listAdapter;
private String musicDirName;
private Spinner spinner;
↑4つ追加。そんで、onCreateを
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main);
//DirListMakerの生成
DirListMaker dlm = new DirListMaker();
//spinnerに渡すリストの作成
ArrayList<String> dirList = new ArrayList<String>();
dirList.add(SD_PATH);
musicDirList = dlm.dirListMaker(dirList, "mp3");
//spinnerの取得とArrayAdapterの生成及びセット
spinner = (Spinner)findViewById(R.id.spinner);
ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<String>(this,
android.R.layout.simple_spinner_item, musicDirList);
spinnerAdapter.setDropDownViewResource(
android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(spinnerAdapter);
spinner.setOnItemSelectedListener(this);
//musicFileListの生成
musicFileList = new ArrayList<String>();
//リストビューの取得と諸々のこと
listView = (ListView)findViewById(R.id.listView);
listView.setItemsCanFocus(false);
listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
//クリックされた事を検知。selectedとの違いは分かってません。
listView.setOnItemClickListener(this);
//musicPlayerの引数に渡すので先に取得
titleView = (TextView)findViewById(R.id.titleView);
//musicPlayerの生成とmusicNumの取得
musicPlayer = new MusicPlayer(titleView);
pauseFlag = false; //一時停止解除
changeMusicFlag = false;//曲変更のお知らせ。
//listAdapterの生成
listAdapter = new MusicListAdapter(this,
R.layout.rowdata, musicFileList, listView);
//musicList変更用
flm = new FileListMaker();
}
こんな↑感じ。それから、
//これも@Override出来ない。なんか残念。spinnerのイベント処理
public void onItemSelected(AdapterView<?> parent,
View view, int position, long id) {
//選択されたアイテムの取得。
musicDirName = musicDirList.get(position);
//リストの詰め替え準備
musicFileList.clear();
//リストの詰め替え
flm.fileListMaker(musicDirName, "mp3", musicFileList);
//listViewの変更
listView.setAdapter(listAdapter);
//色々通知。
musicPlayer.setMusicDir(musicDirName);
musicPlayer.setMusicList(musicFileList);
musicPlayer.setListView(listView);
}
確かこれだけ。後は、MusicPlayer。
フィールドの
private static final String SD_PATH = //SDのパス
Environment.getExternalStorageDirectory().getPath();
削除。そんで、コンストラクタを変更してセッター追加。
public MusicPlayer(TextView tv) {
super();
titleView = tv;
musicNum = 0;
super.setOnCompletionListener(this);
}
public void setMusicList(ArrayList<String> array) {
musicList = array;
}
public void setListView(ListView lv) {
listView = lv;
}
public void setMusicDir(String name) {
musicDirName = name;
}
それから、
listView.setSelection(musicNum - 1);
に変更。これは、なんとなく。見た目の問題。で、最後が
super.setDataSource(musicDirName
+ FILE_SEP + musicList.get(musicNum));
に変更。これは、結構重要。やらないと音楽が聴けません。
以上。だと思います。
なんか、段々それなりになってきた様な気がしないでもない。
でもねー。やっぱりねー。前に作ったのと同じ問題発生中。
強制終了になることはない。と思いたい。
ディレクトリAの5曲目を再生中に、ディレクトリBに変えると
Aの6曲目ではなく、Bの6曲目がかかります。
ちなみにBに6曲目がないと・・・。
1曲目に戻ります。そんだけ。
まあ、ぼちぼち修正します。
次は、ディレクトリをまたいでの連続再生。
問題を解消しないままに。たぶん。
追記
public void onNothingSelected(AdapterView<?> arg0) {
// TODO 自動生成されたメソッド・スタブ
}
これ、忘れてました。追加しろと言われたので、言われるままに。
0 件のコメント:
コメントを投稿