Ich baue einen Musik-Player und ich habe ein songs.java-Fragment, das alle Lieder von der SD-Karte in den RecyclerView zeigt. Wenn ich auf eines der Songs klicke, beginnt es zu spielen. Das Problem ist, ich habe auch ein gleitendes Panel-Layout https://github.com/umano/AndroidSlidingUpPanel in MainActivity.java implementiert und es hat zwei textViews, die Song-Name und Künstlername angezeigt, wenn ein Lied von RecyclerView angeklickt wird und eine Schaltfläche (rot markiert). Das Problem ist, ich kann nicht herausfinden, wie onClickListener auf der Schaltfläche in MainActivity zu implementieren, so dass es die Lieder, die in RecyclerView angezeigt werden, spielt und pausiert. Ich hoffe meine Frage ist klar. Danke im Voraus! Bitte nicht meine Frage downnvote, wenn es albern ist, da ich sehr zu neuen Android Studio bin.Wie implementiert man onClickListener für die Schaltfläche (in MainActivity) zum Abspielen und Anhalten von Songs aus dem Fragment?
Beispiel Screenshot:
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:
public class SongAdapter erweitert 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);
}
}
Schaltfläche klicken:
buttonabc.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (mListener!=null)
{
mListener.onsongClicked(true);
mListener=null;
}
else { mListener.onsongClicked(false);}
}
});
so müssen Sie Schaltfläche klicken Anruf von Aktivität senden rit fragmentieren? –
Ja, ich meine, ich möchte die Lieder des Fragments pausieren und abspielen, indem ich den Button in MainActivity benutze! –
Sie haben Fragment in Viewpager oder in Framlayout Container? –