大家好,希望你们一切都好。
我正在开发一个 Android 应用程序,它将播放不同的动物声音。
我正在使用回收视图,如下面的屏幕截图所示。现在我面临一个问题,我的行中有一个播放按钮,每当我从项目 0 或在视图内显示暂停选项的任何位置播放声音时,该按钮都会播放动物的声音。但每当我单击下一个项目 1 或任何其他项目时,它都不会更改上一个项目 0 的图像。
我通过使用以下代码刷新我的适配器列表来完成此操作。!
但我认为这不是一个好的做法。!
t1.recyclerView.setAdapter(null);
t1.customAdapter=new CustomAdapter(t1.animalList,ctx);
t1.recyclerView.setAdapter(t1.customAdapter);
我尝试使用每一样东西notifyItemChanged(oldPosition)
但还是没有得到我想要的结果!
请建议我一个合适的方法来解决这个问题?我是 Android 新手,我有一个想法要获取最后一项的视图并先保存它,然后我获取该视图并在上一个列表按钮上设置默认图像播放,但我不知道该怎么做?
这是我的自定义适配器代码。!
public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.MyViewHolder> {
private List<Animal> AnimalList;
public Context ctx;
public static int postionchange=-1;
public static Tab1Birds t1;
final int[] countLike = {0};
//public static MediaPlayer mediaPlayer2 = new MediaPlayer();
int pos=0;
public class MyViewHolder extends RecyclerView.ViewHolder {
public ImageView display;
public TextView nameTextView;
public ImageButton play,options,menubtn;
public MyViewHolder(View view) {
super(view);
nameTextView = (TextView) view.findViewById(R.id.nameTextView);
play=(ImageButton)view.findViewById(R.id.playbtn);
options=(ImageButton)view.findViewById(R.id.menubtn);
display=(ImageView)view.findViewById(R.id.imageview);
menubtn = (ImageButton) view.findViewById(R.id.menubtn);
//MediaPlayerClass.mediaPlayer= new MediaPlayer();
}
}
public CustomAdapter(List<Animal> moviesList,Context ct) {
this.AnimalList = moviesList;
this.ctx=ct;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.row_list, parent, false);
return new MyViewHolder(itemView);
}
@Override
public void onBindViewHolder(final MyViewHolder holder, final int position) {
final Animal animal = AnimalList.get(position);
final int[] previous = {position};
holder.nameTextView.setText(animal.getName());
holder.display.setImageResource(animal.getImageResource());
//////////////////////////////////////////////////////////////////////////////////////////////////////////
holder.options.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
if (MediaPlayerClass.mediaPlayer.isPlaying()) {
holder.play.setBackgroundResource(R.drawable.play_btn);
MediaPlayerClass.mediaPlayer.stop();
}
} catch (Exception ex) {
}
Dialog dialog;
final String[] items = {"SET AS RING TUNE", "SET AS MESSAGE TUNE", "SET AS ALARM TUNE"};
final ArrayList itemsSelected = new ArrayList();
final AlertDialog.Builder builder = new AlertDialog.Builder(ctx);
builder.setTitle("OPTIONS");
builder.setMultiChoiceItems(items, null,
new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int selectedItemId,
boolean isSelected) {
if (isSelected) {
itemsSelected.add(selectedItemId);
} else if (itemsSelected.contains(selectedItemId)) {
itemsSelected.remove(Integer.valueOf(selectedItemId));
}
}
})
.setPositiveButton("Done!", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
Toast toast = Toast.makeText(ctx, "successfully selected", Toast.LENGTH_SHORT);
toast.show();
SparseBooleanArray CheCked = ((AlertDialog) dialog).getListView().getCheckedItemPositions();
String str = "";
if (CheCked.get(0)) {
savering(animal.getSoundResource());
}
if (CheCked.get(1)) {
savemsg(animal.getSoundResource());
}
if (CheCked.get(2)) {
savealarm(animal.getSoundResource());
}
// if (CheCked.get(3)) {
// DatabaseHelper.save_bookmarks(itemsList.get(position).getitemName(), R.drawable.play_btn, itemsList.get(position).getItemTuneSt());
// Toast.makeText(ctx, "Item added to favourites", Toast.LENGTH_SHORT).show();
// }
}
})
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
}
});
dialog = builder.create();
dialog.show();
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
}
});
pos=position;
// for animation
// ///////////////////////////
//animate(holder);//Function for animation
//////////////////////////////
holder.play.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(postionchange==-1)
{
postionchange=position;
}
if(postionchange!=position)
{
holder.play.setBackgroundResource(R.drawable.play_btn);
}
holder.play.setBackgroundResource(R.drawable.pause_btn);// present state
MediaPlayerClass.play(animal.getSoundResource(),ctx);
if(countLike[0] ==0)
{
countLike[0] =1;
}else if(countLike[0] ==1)
{
//if is playing then Pause
if(MediaPlayerClass.mediaPlayer.isPlaying())
MediaPlayerClass.mediaPlayer.stop();
t1.recyclerView.setAdapter(null);
t1.customAdapter=new CustomAdapter(t1.animalList,ctx);
t1.recyclerView.setAdapter(t1.customAdapter);
holder.play.setBackgroundResource(R.drawable.play_btn); //sound stop show play button
countLike[0] =2;
}
if(countLike[0] >1)
{
countLike[0] =0;
holder.play.setBackgroundResource(R.drawable.play_btn); // click to play music, click again to stop music
}
//setOnCompletionListener
MediaPlayerClass.mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
holder.play.setBackgroundResource(R.drawable.play_btn);
}
});
// MediaPlayerClass.mediaPlayer.start();
}
});
}
@Override
public int getItemCount() {
return AnimalList.size();
}
//animation
public void animate(RecyclerView.ViewHolder viewHolder) {
final Animation animAnticipateOvershoot = AnimationUtils.loadAnimation(ctx, R.anim.bounce_interpolator);
viewHolder.itemView.setAnimation(animAnticipateOvershoot);
}
//////////////////////////////////////////////////////////////////////////////////////////
}
这是一个例子三星手机中的音乐播放器.!
当我播放音乐时,它会显示动画,当我播放下一首歌曲时,它会播放该歌曲并停止上一首播放的音乐及其动画。!
我知道如何停止媒体播放器,但如何改变停止它动画片或音乐库等?