无法从 ArrayAdapter TextView 中单击的最后一个项目中删除图像视图
Not able to remove image view from from last item clicked in ArrayAdapter TextView
所以我有一个歌曲列表,它在单击文本视图时播放歌曲并在歌曲名称旁边显示 gif(音频频谱)。我想要的是当我从歌曲列表中点击另一首歌曲时,之前点击的歌曲应该停止(它能够做到)。但除此之外,我还希望上一首歌的 gif 消失,这是我做不到的。这是我的代码 -
package com.shaikhsakib.sounddemo;
import android.app.Activity;
import android.content.Context;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Environment;
import android.support.annotation.NonNull;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageButton;
import android.widget.TextView;
import android.widget.Toast;
import com.google.firebase.database.DatabaseReference;
import java.util.List;
import pl.droidsonroids.gif.GifImageView;
public class SongList extends ArrayAdapter {
private Activity context;
private List<Song> songList;
DatabaseReference databaseReference;
MediaPlayer mediaPlayer;
View listViewItem;
boolean unclicked = true;
public SongList(@NonNull Activity context, List<Song> songList, DatabaseReference databaseReference){
super(context, R.layout.playlist_textview, songList);
this.context = context;
this.songList = songList;
this.databaseReference = databaseReference;
}
@Override
public View getView(final int pos, View view, ViewGroup viewGroup){
LayoutInflater inflater = context.getLayoutInflater();
listViewItem = inflater.inflate(R.layout.songlist_textview, null, true);
final TextView songListTextView = (TextView) listViewItem.findViewById(R.id.songListTextView);
songListTextView.setSelected(true);
final GifImageView bass = (GifImageView) listViewItem.findViewById(R.id.bass);
final Song list = songList.get(pos);
songListTextView.setText(list.getSongName());
songListTextView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mediaPlayer != null && mediaPlayer.isPlaying() && null!=bass.getDrawable()) {
mediaPlayer.stop();
//trying to remove gif from last song
bass.setVisibility(View.GONE);
}else {
//trying to put back gif over here on current song
bass.setVisibility(View.VISIBLE);
}
try {
String f = Environment.getExternalStorageDirectory().getAbsolutePath() + "/music/" + list.getSongName().toString() + ".mp3";
Uri uri = Uri.parse(f);
mediaPlayer = MediaPlayer.create(context.getApplicationContext(), uri);
bass.setImageResource(R.drawable.bass);
mediaPlayer.start();
} catch (Exception e) {
e.printStackTrace();
}
}
});
bass.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(mediaPlayer.isPlaying()) {
mediaPlayer.pause();
bass.setImageResource(R.drawable.bass1);
}
else {
bass.setImageResource(R.drawable.bass);
mediaPlayer.start();
}
}
});
return listViewItem;
}
}
这是演示视频 link -
在SongList
class中声明一个GifImageView lastBass;
作为全局变量。
现在将您的 songListTextView 的 onClickListener
代码修改为:
songListTextView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mediaPlayer != null && mediaPlayer.isPlaying() && null!=bass.getDrawable()) {
mediaPlayer.stop();
//trying to remove gif from last song
if(lastBass!=null)
lastBass.setVisibility(View.GONE);
bass.setVisibility(View.GONE);
}else {
if(lastBass!=null)
lastBass.setVisibility(View.GONE);
//trying to put back gif over here on current song
bass.setVisibility(View.VISIBLE);
}
try {
String f = Environment.getExternalStorageDirectory().getAbsolutePath() + "/music/" + list.getSongName().toString() + ".mp3";
Uri uri = Uri.parse(f);
mediaPlayer = MediaPlayer.create(context.getApplicationContext(), uri);
bass.setImageResource(R.drawable.bass);
bass.setVisibility(View.VISIBLE); // add this line
mediaPlayer.start();
lastBass=bass; // initialize lastBass here
} catch (Exception e) {
e.printStackTrace();
}
}
});
更新
添加: bass.setVisibility(View.VISIBLE);
在 bass.setImageResource(R.drawable.bass);
之后,如上面的代码
尝试保存上一首歌曲的id:
在您的 SongList 适配器中创建一些值并在按下时使用歌曲 ID 对其进行初始化
songListTextView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
someValue = pos //storing clicked song id
if(someValue != -1){
//stop your gif here using someValue and start pressed song gif using pos value
}
...
}
});
您还应该将此 someValue
传递给 activity 或片段并返回给适配器,以便您可以编写您的函数,returns this someValue
我觉得就这些了,有什么不对请告知
所以我有一个歌曲列表,它在单击文本视图时播放歌曲并在歌曲名称旁边显示 gif(音频频谱)。我想要的是当我从歌曲列表中点击另一首歌曲时,之前点击的歌曲应该停止(它能够做到)。但除此之外,我还希望上一首歌的 gif 消失,这是我做不到的。这是我的代码 -
package com.shaikhsakib.sounddemo;
import android.app.Activity;
import android.content.Context;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Environment;
import android.support.annotation.NonNull;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageButton;
import android.widget.TextView;
import android.widget.Toast;
import com.google.firebase.database.DatabaseReference;
import java.util.List;
import pl.droidsonroids.gif.GifImageView;
public class SongList extends ArrayAdapter {
private Activity context;
private List<Song> songList;
DatabaseReference databaseReference;
MediaPlayer mediaPlayer;
View listViewItem;
boolean unclicked = true;
public SongList(@NonNull Activity context, List<Song> songList, DatabaseReference databaseReference){
super(context, R.layout.playlist_textview, songList);
this.context = context;
this.songList = songList;
this.databaseReference = databaseReference;
}
@Override
public View getView(final int pos, View view, ViewGroup viewGroup){
LayoutInflater inflater = context.getLayoutInflater();
listViewItem = inflater.inflate(R.layout.songlist_textview, null, true);
final TextView songListTextView = (TextView) listViewItem.findViewById(R.id.songListTextView);
songListTextView.setSelected(true);
final GifImageView bass = (GifImageView) listViewItem.findViewById(R.id.bass);
final Song list = songList.get(pos);
songListTextView.setText(list.getSongName());
songListTextView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mediaPlayer != null && mediaPlayer.isPlaying() && null!=bass.getDrawable()) {
mediaPlayer.stop();
//trying to remove gif from last song
bass.setVisibility(View.GONE);
}else {
//trying to put back gif over here on current song
bass.setVisibility(View.VISIBLE);
}
try {
String f = Environment.getExternalStorageDirectory().getAbsolutePath() + "/music/" + list.getSongName().toString() + ".mp3";
Uri uri = Uri.parse(f);
mediaPlayer = MediaPlayer.create(context.getApplicationContext(), uri);
bass.setImageResource(R.drawable.bass);
mediaPlayer.start();
} catch (Exception e) {
e.printStackTrace();
}
}
});
bass.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(mediaPlayer.isPlaying()) {
mediaPlayer.pause();
bass.setImageResource(R.drawable.bass1);
}
else {
bass.setImageResource(R.drawable.bass);
mediaPlayer.start();
}
}
});
return listViewItem;
}
}
这是演示视频 link -
在SongList
class中声明一个GifImageView lastBass;
作为全局变量。
现在将您的 songListTextView 的 onClickListener
代码修改为:
songListTextView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mediaPlayer != null && mediaPlayer.isPlaying() && null!=bass.getDrawable()) {
mediaPlayer.stop();
//trying to remove gif from last song
if(lastBass!=null)
lastBass.setVisibility(View.GONE);
bass.setVisibility(View.GONE);
}else {
if(lastBass!=null)
lastBass.setVisibility(View.GONE);
//trying to put back gif over here on current song
bass.setVisibility(View.VISIBLE);
}
try {
String f = Environment.getExternalStorageDirectory().getAbsolutePath() + "/music/" + list.getSongName().toString() + ".mp3";
Uri uri = Uri.parse(f);
mediaPlayer = MediaPlayer.create(context.getApplicationContext(), uri);
bass.setImageResource(R.drawable.bass);
bass.setVisibility(View.VISIBLE); // add this line
mediaPlayer.start();
lastBass=bass; // initialize lastBass here
} catch (Exception e) {
e.printStackTrace();
}
}
});
更新
添加: bass.setVisibility(View.VISIBLE);
在 bass.setImageResource(R.drawable.bass);
之后,如上面的代码
尝试保存上一首歌曲的id:
在您的 SongList 适配器中创建一些值并在按下时使用歌曲 ID 对其进行初始化
songListTextView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
someValue = pos //storing clicked song id
if(someValue != -1){
//stop your gif here using someValue and start pressed song gif using pos value
}
...
}
});
您还应该将此 someValue
传递给 activity 或片段并返回给适配器,以便您可以编写您的函数,returns this someValue
我觉得就这些了,有什么不对请告知