我正在建立一个音乐播放器,并且我有一个songs.java片段,它将SD卡中的所有歌曲显示到recyclerView中。当我点击任何一首歌曲时,它就开始播放。问题是,我还有一个在MainActivity.java中实现的滑动面板布局https://github.com/umano/AndroidSlidingUpPanel,它有两个textView,当单击recyclerView的歌曲并显示一个按钮(标记为红色)时,显示歌曲名称和演出者名称。问题是我无法弄清楚如何在MainActivity中的按钮上实现onClickListener,以便播放和暂停在recyclerView中显示的歌曲。我希望我的问题很清楚。提前致谢!如果它很愚蠢,请不要降低我的问题,因为我对新的android studio非常感兴趣。如何实现onClickListener按钮(在MainActivity中)播放和暂停片段中的歌曲?
实施例的屏幕截图:
Songs.java
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.songs_activity, container, false);
Activity activity = getActivity();
recyclerView = (RecyclerView) view.findViewById(R.id.recyclerView);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext());
recyclerView.setLayoutManager(linearLayoutManager);
songAdapter = new SongAdapter(getContext(), SongList, new SongAdapter.RecyclerItemClickListener() {
@Override
public void onClickListener(SongInfoModel song, int position) {
Toast.makeText(getContext(), song.getSongName(), Toast.LENGTH_SHORT).show();
Activity activity = getActivity();
if (activity instanceof MainActivity) {
mainActivity = (MainActivity) activity;
mainActivity.setsongText(song);
}
prepareSong(song);
}
@Override
public void onLongClickListener(SongInfoModel song, int position) {
Toast.makeText(getContext(), "You long clicked me, thank you!", Toast.LENGTH_SHORT).show();
}
});
Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
String selection = MediaStore.Audio.Media.IS_MUSIC + "!=0";
Cursor cursor = getActivity().getContentResolver().query(uri, null, selection, null, null);
if (cursor != null) {
if (cursor.moveToFirst()) {
do {
String name = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME));
String artist = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST));
Long duration = cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.DURATION));
String data = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA));
// String AlbumArt = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID));
SongInfoModel s = new SongInfoModel(name, artist, null, null, null, duration, data);
SongList.add(s);
} while (cursor.moveToNext());
}
cursor.close();
Collections.sort(SongList, new Comparator<SongInfoModel>() {
@Override
public int compare(SongInfoModel lhs, SongInfoModel rhs) {
return lhs.getSongName().compareTo(rhs.getSongName());
}
});
}
alphaAdapter = new ScaleInAnimationAdapter(songAdapter);
alphaAdapter.setDuration(1000);
alphaAdapter.setInterpolator(new OvershootInterpolator());
alphaAdapter.setFirstOnly(false);
recyclerView.setAdapter(alphaAdapter);
alphaAdapter.notifyDataSetChanged();
mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
togglePlay(mp);
}
});
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
}
});
return view;
}
private void prepareSong(SongInfoModel song) {
mediaPlayer.reset();
try {
mediaPlayer.setDataSource(song.getData());
mediaPlayer.prepareAsync();
} catch (IOException e) {
e.printStackTrace();
}
}
private void togglePlay(MediaPlayer mp) {
if (mp.isPlaying()) {
mp.stop();
mp.reset();
} else {
mp.start();
}
}
MainActivity.java:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
buttonabc = findViewById(R.id.songButton);
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayShowTitleEnabled(false);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
Window w = getWindow(); // in Activity's onCreate() for instance
w.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
}
sectionsPageAdapter = new SectionsPageAdapter(getSupportFragmentManager());
viewPager = (ParallaxViewPager) findViewById(R.id.viewpager);
setupViewPager(viewPager);
viewPager.setOffscreenPageLimit(6);
smartTabLayout = (SmartTabLayout) findViewById(R.id.viewpagertab);
smartTabLayout.setViewPager(viewPager);
backarrow = (ImageView) findViewById(R.id.imageView);
backarrow.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
resideMenu.openMenu(ResideMenu.DIRECTION_LEFT);
}
});
SongNameSlide = findViewById(R.id.SongNameSlide);
ArtistNameSlide = findViewById(R.id.ArtistNameSlide);
slidingUpPanelLayout = (SlidingUpPanelLayout)findViewById(R.id.sliding_layout);
slidingUpPanelLayout.addPanelSlideListener(new SlidingUpPanelLayout.PanelSlideListener() {
@Override
public void onPanelSlide(View panel, float slideOffset) {
Log.i(TAG, "onPanelSlide, offset " + slideOffset);
SongNameSlide.setAlpha(1 - slideOffset);
ArtistNameSlide.setAlpha(1 - slideOffset);
buttonabc.setAlpha(1 - slideOffset);
slidingUpPanelLayout.setDragView(panel);
}
@Override
public void onPanelStateChanged(View panel, SlidingUpPanelLayout.PanelState previousState, SlidingUpPanelLayout.PanelState newState) {
}
});
slidingUpPanelLayout.setFadeOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
slidingUpPanelLayout.setPanelState(SlidingUpPanelLayout.PanelState.COLLAPSED);
}
});
setUpMenu();
}
public void setsongText(SongInfoModel songInfoModel){
SongNameSlide.setText(songInfoModel.getSongName());
ArtistNameSlide.setText(songInfoModel.getArtistName());
}
SongAdapter.java:
公共类SongAdapter扩展RecyclerView.Adapter {
ArrayList<SongInfoModel> SongList = new ArrayList<>();
Context context;
private RecyclerItemClickListener listener;
public OnSongClickListener mListener;
public SongAdapter(Context context, ArrayList<SongInfoModel> SongList, RecyclerItemClickListener listener) {
this.context = context;
this.SongList = SongList;
this.listener = listener;
}
@Override
public SongAdapter.SongHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.row_song, parent, false);
return new SongHolder(view);
}
@Override
public void onBindViewHolder(final SongAdapter.SongHolder holder, final int position) {
final SongInfoModel songInfoModel = SongList.get(position);
if(songInfoModel!= null){
holder.songName.setText(songInfoModel.SongName);
holder.artistName.setText(songInfoModel.ArtistName);
holder.duration.setText(String.valueOf(songInfoModel.duration));
String duration = Utility.convertDuration(songInfoModel.getDuration());
holder.duration.setText(duration);
holder.bind(songInfoModel, listener);
}
}
@Override
public int getItemCount() {
return SongList.size();
}
public class SongHolder extends RecyclerView.ViewHolder {
TextView songName;
TextView artistName;
TextView duration;
public SongHolder(View itemView) {
super(itemView);
songName = (TextView)itemView.findViewById(R.id.SongName);
artistName= (TextView)itemView.findViewById(R.id.ArtistName);
duration = (TextView) itemView.findViewById(R.id.duration);
}
public void bind(final SongInfoModel songInfoModel, final RecyclerItemClickListener listener) {
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
listener.onClickListener(songInfoModel, getLayoutPosition());
}
});
itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
listener.onLongClickListener(songInfoModel, getLayoutPosition());
return true;
}
});
}
}
public void setOnSongClickListener(OnSongClickListener listener) {
mListener = listener;
}
public interface RecyclerItemClickListener{
void onClickListener(SongInfoModel song, int position);
void onLongClickListener(SongInfoModel song, int position);
}
public interface OnSongClickListener {
void onsongClicked(boolean songPlayed);
}
if(mListener!=null){
mListener.onsongClicked(false);
}
}
按钮点击:
buttonabc.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (mListener!=null)
{
mListener.onsongClicked(true);
mListener=null;
}
else { mListener.onsongClicked(false);}
}
});
所以你必须从活动的发送按钮,点击呼叫片段RIT? –
是的,我的意思是我想暂停并使用MainActivity中的按钮播放片段的歌曲! –
你在viewpager或Framlayout容器中有片段? –