私は音楽プレーヤーアプリを開発しています。ここでは、sdcardで利用可能なすべての音楽ファイルを取得し、リストに表示します。 リスト内には、曲を再生するための再生ボタンがあります。 最初は、すべての画像が「PLAY BUTTON」状態になります。 ボタンのイメージをリスト内でクリックすると変更しますアンドロイドで表示
ユーザーが再生ボタンをクリックすると、再生ボタンがこれに変わります。
や音楽を再生/一時停止に応じます。
しかし、私が直面している問題は、最初の曲を再生すると曲が再生され、アイコンが変わります。リストを下にスクロールすると、「PAUSE」ボタンの画像がランダムに表示されますリスト。以下は
コードです: (そのまだdevelopemntの下で、それは音楽を演奏することになると、私は、この画像の問題を解決するために定義さ)
MusicActivity:
package sample.music;
import android.app.Activity;
import android.content.Context;
import android.database.Cursor;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
public class MusicActivity extends Activity {
ListView musiclist;
Cursor musiccursor;
int music_column_index;
int count;
MediaPlayer mMediaPlayer;
private static LayoutInflater inflater = null;
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
mMediaPlayer.release();
}
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
init_phone_music_grid();
}
private void init_phone_music_grid() {
System.gc();
String[] proj = { MediaStore.Audio.Media._ID,
MediaStore.Audio.Media.DATA,
MediaStore.Audio.Media.DISPLAY_NAME,
MediaStore.Video.Media.SIZE };
musiccursor = managedQuery(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
proj, null, null, null);
count = musiccursor.getCount();
musiclist = (ListView) findViewById(R.id.PhoneMusicList);
musiclist.setAdapter(new MusicAdapter(getApplicationContext()));
musiclist.setDividerHeight(50);
// musiclist.setOnItemClickListener(musicgridlistener);
mMediaPlayer = new MediaPlayer();
}
static class ViewHolder {
TextView textView;
ImageView imageView;
}
public class MusicAdapter extends BaseAdapter {
private Context mContext;
public MusicAdapter(Context c) {
mContext = c;
}
public int getCount() {
return count;
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
System.gc();
String id = null;
View vi = convertView;
final int muscPosition = position;
final ViewHolder viewHolder;
if (convertView == null) {
inflater = MusicActivity.this.getLayoutInflater();
vi = inflater.inflate(R.layout.item, null);
}
viewHolder = new ViewHolder();
viewHolder.textView = (TextView) vi.findViewById(R.id.text);
viewHolder.imageView = (ImageView) vi.findViewById(R.id.image);
//final ImageView tempView = viewHolder.imageView;
viewHolder.imageView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
music_column_index = musiccursor
.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA);
musiccursor.moveToPosition(muscPosition);
String filename = musiccursor
.getString(music_column_index);
try {
if (mMediaPlayer.isPlaying()) {
Toast.makeText(MusicActivity.this,
"mMediaPlayer.isPlaying()",
Toast.LENGTH_LONG).show();
try {
mMediaPlayer.stop();
mMediaPlayer.release();
viewHolder.imageView.setImageResource(R.drawable.play_button);
//notifyDataSetChanged();
} catch (Exception e) {
// TODO: handle exception
Toast.makeText(MusicActivity.this, e + "",
Toast.LENGTH_LONG).show();
}
} else {
Toast.makeText(MusicActivity.this,
"mMediaPlayer.start", Toast.LENGTH_LONG)
.show();
viewHolder.imageView.setImageResource(R.drawable.pause_button);
//notifyDataSetChanged();
mMediaPlayer.setDataSource(filename);
mMediaPlayer.prepare();
mMediaPlayer.start();
}
} catch (Exception e) {
Toast.makeText(MusicActivity.this, e + ""+".....",
Toast.LENGTH_LONG).show();
}
}
});
music_column_index = musiccursor
.getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME);
musiccursor.moveToPosition(position);
id = musiccursor.getString(music_column_index);
music_column_index = musiccursor
.getColumnIndexOrThrow(MediaStore.Audio.Media.SIZE);
musiccursor.moveToPosition(position);
id += " Size(KB):" + musiccursor.getString(music_column_index);
vi.setTag(viewHolder);
viewHolder.textView.setText(id);
return vi;
}
}
}
main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<ListView
android:id="@+id/PhoneMusicList"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</LinearLayout>
item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/image"
android:layout_width="50dip"
android:layout_height="50dip" android:src="@drawable/play_button" android:scaleType="centerCrop"/>
<TextView
android:id="@+id/text"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1" android:layout_gravity="left|center_vertical" android:textSize="20dip" android:layout_marginLeft="10dip"/>
</LinearLayout>
CursorAdapterはカーソルインデックスまたはListView位置に '再生'アイコンを描画していますか? (前者は正しいでしょう)それが私がチェックする最初のことです。 – Sparky
もしあなたがこれをしたらplzは私にこの長い時間pls reply –