如何解决通过搜索栏android搜索后如何在Listview中播放正确的歌曲
我正在创建一个简单的android音乐播放器应用程序,该程序播放存储在原始文件夹中的歌曲列表,效果很好,但是在实现操作栏搜索视图之后。当我通过搜索栏搜索特定歌曲时,列表项的顺序发生了变化,当我单击该歌曲时,它正在播放另一首歌曲。我不知道该怎么解决。帮我解决这个问题。
这是我的代码主要活动
public class MainActivity extends AppCompatActivity {
final ArrayList<SongList> songs = new ArrayList<>();
ListView listView;
private MediaPlayer mMediaPlayer;
private AudioManager mAudioManager;
private AudioManager.OnAudioFocusChangeListener mOnAudioFocusChangeListener = new AudioManager.OnAudioFocusChangeListener() {
@Override
public void onAudioFocusChange(int focusChange) {
if (focusChange == AudioManager.AUDIOFOCUS_LOSS_TRANSIENT ||
focusChange == AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK) {
mMediaPlayer.pause();
mMediaPlayer.seekTo(0);
} else if (focusChange == AudioManager.AUDIOFOCUS_GAIN) {
mMediaPlayer.start();
} else if (focusChange == AudioManager.AUDIOFOCUS_LOSS) {
releaseMediaPlayer();
}
}
};
private MediaPlayer.OnCompletionListener mCompletionListener = new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
releaseMediaPlayer();
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
listView = findViewById(R.id.list);
songs.add(new SongList("Let Go","Garden State",R.raw.s1));
songs.add(new SongList("Falling Slowly","Once",R.raw.s2));
songs.add(new SongList("Kiss Me","She's All That",R.raw.s3));
songs.add(new SongList("Wher Is","Skyfall",R.raw.s4));
songs.add(new SongList("When I Fall","Sleepless In Seattle",R.raw.s5));
songs.add(new SongList("Happy","Despicable Me 2",R.raw.s6));
songs.add(new SongList("can't Stop","Berlin",R.raw.s7));
songs.add(new SongList("You And Me","Greats",R.raw.s8));
songs.add(new SongList("Young And Beautiful","Real",R.raw.s9));
songs.add(new SongList("Real Hero","Youth",R.raw.s10));
songs.add(new SongList("I Missed Tou","Reality Bites",R.raw.s11));
songs.add(new SongList("I Will Always","The Bodyguard",R.raw.s12));
listView.setAdapter(new SongAdapter(MainActivity.this,R.layout.list_item,songs));
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView,View view,int position,long l) {
releaseMediaPlayer();
SongList songList = songs.get(position);
int result = mAudioManager.requestAudioFocus(mOnAudioFocusChangeListener,AudioManager.STREAM_MUSIC,AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);
if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
mMediaPlayer = MediaPlayer.create(MainActivity.this,songList.getAudioResourceId());
mMediaPlayer.start();
mMediaPlayer.setOnCompletionListener(mCompletionListener);
}
}
});
}
@Override
protected void onStop() {
super.onStop();
releaseMediaPlayer();
}
private void releaseMediaPlayer() {
if (mMediaPlayer != null) {
mMediaPlayer.release();
mMediaPlayer = null;
mAudioManager.abandonAudioFocus(mOnAudioFocusChangeListener);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.my_menu,menu);
MenuItem menuItem = menu.findItem(R.id.searchMenu);
SearchView searchView = (SearchView) menuItem.getActionView();
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
ArrayList<SongList> results = new ArrayList<>();
for(SongList x: songs)
{
if(x.SongName.contains(newText))
results.add(x);
}
((SongAdapter)listView.getAdapter()).update(results);
return false;
}
});
return super.onCreateOptionsMenu(menu);
}
}
适配器
public class SongAdapter extends ArrayAdapter {
ArrayList<SongList> songLists;
public SongAdapter(Context context,int layout,ArrayList<SongList> songLists)
{
super(context,layout);
this.songLists = songLists;
}
public void update(ArrayList<SongList> results)
{
songLists = new ArrayList<>();
songLists.addAll(results);
notifyDataSetChanged();
}
public class ViewHolder{
TextView textView1;
TextView textView2;
}
@Override
public int getCount() {
return songLists.size();
}
@NonNull
@Override
public View getView(int position,@Nullable View convertView,@NonNull ViewGroup parent) {
View row;
row = convertView;
ViewHolder viewHolder;
if(row==null)
{
row = LayoutInflater.from(getContext()).inflate(R.layout.list_item,parent,false);
viewHolder = new ViewHolder();
viewHolder.textView1 = row.findViewById(R.id.song_text_view);
viewHolder.textView2 = row.findViewById(R.id.movie_text_view);
row.setTag(viewHolder);
}
else{
viewHolder = (ViewHolder) row.getTag();
}
viewHolder.textView1.setText(songLists.get(position).SongName);
viewHolder.textView2.setText(songLists.get(position).MovieName);
return row;
}
}
Java类
public class SongList {
String SongName;
String MovieName;
int AudioResourceId;
public SongList(String SongName,String MovieName,int AudioResourceId) {
this.SongName = SongName;
this.MovieName = MovieName;
this.AudioResourceId = AudioResourceId;
}
public int getAudioResourceId() {
return AudioResourceId;
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。