РЕДАКТИРОВАНИЕ:
ПРОБЛЕМА : Я пытаюсь показать детали исполнителя из моего списка во фрагмент, но у меня есть CustomAdapter, который я использую, поэтому я незнать, как этого добиться, когда логика моих приложений выглядит следующим образом:
ListViewAdapter.java
-> MainFragment.java
-> SongFragment.java
(мне нужно перейти от переходника к одному фрагменту к другому фрагменту, и это вызывает у меня проблемы)
Я пытаюсь установить имя исполнителя , название песни и изображение исполнителя, когда я иду на SongFragment.Java
, но мой setOnItemClickListener
находится внутри MainFragment.java
.
Вот демонстрация того, что должно произойти
Шаги:
- Нажмите на песню из списка (
setOnItemClickListener
) Это мой customListView - Откройте
SongFragment
и покажите информацию о певце (исполнитель, название песни, изображение исполнителя) Это мой SongFragment
после того, как я нажал на песню
Мой ListViewAdapter
код:
public class ListViewAdapter extends BaseAdapter {
//Create variables
MediaPlayer mediaPlayer;
int layout;
Song currentSong;
ArrayList<Song> arrayList;
Context context;
public ListViewAdapter(int layout, ArrayList<Song> arrayList, Context
context) {
this.layout = layout;
this.arrayList = arrayList;
this.context = context;
}
private class Viewholder {
TextView artistTxt, songNameTxt;
ImageView playB, stopB;
CircleImageView artistImg;
}
@Override
public int getCount() {
return arrayList.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View view, ViewGroup parent) {
final Viewholder viewholder;
if (view == null) {
viewholder = new Viewholder();
LayoutInflater layoutInflater = (LayoutInflater)
context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = layoutInflater.inflate(layout, null);
viewholder.artistTxt = (TextView) view.findViewById(R.id.artistTxt);
viewholder.songNameTxt = (TextView)
view.findViewById(R.id.songNameTxt);
viewholder.playB = (ImageView) view.findViewById(R.id.playB);
viewholder.stopB = (ImageView) view.findViewById(R.id.stopB);
viewholder.artistImg = (CircleImageView)
view.findViewById(R.id.artistImg);
view.setTag(viewholder);
} else {
viewholder = (Viewholder) view.getTag();
}
final Song song = arrayList.get(position);
viewholder.artistImg.setImageResource(song.getArtistImg());
viewholder.artistTxt.setText(song.getArtist());
viewholder.songNameTxt.setText(song.getSongName());
//get all songs
mediaPlayer = MediaPlayer.create(context, song.getSong());
viewholder.playB.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (currentSong == null) {
mediaPlayer = MediaPlayer.create(context, song.getSong());
}
//if mediaplayer is not null and my current song is not equal to
//the new song i clicked on
if (mediaPlayer != null && currentSong != song) {
//resets the mediaplayer and creates a new song from the
//position in the list
mediaPlayer.reset();
mediaPlayer = MediaPlayer.create(context, song.getSong());
viewholder.playB.setImageResource(R.drawable.play_black);
mediaPlayer.start();
viewholder.playB.setImageResource(R.drawable.pause_black);
} else {
mediaPlayer.pause();
viewholder.playB.setImageResource(R.drawable.play_black);
}
//check if current song is null or the newly clicked song is
//equal to my current song
//if true then assign the newly clicked song as my CURRENT one
//--so it doesnt play the same song for every single one
if (currentSong == null || song != currentSong) {
currentSong = song;
}
}
});
//stop song
viewholder.stopB.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//stops my current song and make it null
if (currentSong != null) {
mediaPlayer.stop();
mediaPlayer.release();
currentSong = null;
viewholder.playB.setImageResource(R.drawable.play_black);
}
}
});
return view;
}
My MainFragment.java
, где я добавляю свои песни в список и вызываю мой адаптер:
public class MainFragment extends Fragment {
//Declare variables
ArrayList<Song> arrayList;
ListView songListView;
ListViewAdapter adapter;
SongFragment songFragment;
FragmentManager fragmentManager;
FragmentTransaction fragmentTransaction;
@Nullable
@Override
public View onCreateView(@NonNull final LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_main, container, false);
//Find my listview
songListView = (ListView) view.findViewById(R.id.songListView);
//create a new arraylist object
arrayList = new ArrayList<>();
//Add songs to my list
arrayList.add(new Song("Beyonce", "-Formation", R.raw.beyonce_formation, R.drawable.beyonce));
arrayList.add(new Song("Chris Brown", "-Hope You Do", R.raw.chrisbrown_hopeyoudo, R.drawable.chrisbrown));
arrayList.add(new Song("Akon ft. Colby'O'Donis", "-Beautiful", R.raw.akon_beautiful_ft_colbyodonis_kardinaloffishall, R.drawable.akon));
arrayList.add(new Song("Akon", "-Beautiful", R.raw.akon_dontmatter, R.drawable.akon));
arrayList.add(new Song("Akon", "-Locked Up", R.raw.akon_lockedup_ft_stylesp, R.drawable.akon));
arrayList.add(new Song("Ava Max", "-Sweet but Psycho", R.raw.avamax_sweetbutpsycho, R.drawable.avamax));
arrayList.add(new Song("Tupac and Biggie ft. Akon Remix", "-Ghetto", R.raw.tupacbiggieakon_ghetto, R.drawable.biggie));
//Create a new adapter of my custom adapter and assign its values
adapter = new ListViewAdapter(R.layout.listview_customlayout, arrayList, getActivity());
//Set my listview to my custom adapter
songListView.setAdapter(adapter);
//Click on a specific song from my list
songListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//Initiliaze my songFragment to my fragment class
songFragment = new SongFragment();
//call FragmentManager and begin the transaction to my songFragment class
fragmentManager = getFragmentManager();
fragmentTransaction = fragmentManager.beginTransaction();
//When clicked on a listview item - navigate to songfragment and when clicked back -> go back to mainfragment
//save my mainfragment to my stack so it isnt destroyed but kept safe so i can get back to it
fragmentTransaction.replace(R.id.fragment_container, songFragment).addToBackStack(null).commit();
}
});
//return my view
return view;
}
} My customListView.xml
:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white">
<de.hdodenhof.circleimageview.CircleImageView
android:id="@+id/artistImg"
android:layout_width="50sp"
android:layout_height="50sp"
android:src="@drawable/musiclogo"
app:civ_border_color="@color/white"
app:civ_border_width="2dp" />
<TextView
android:id="@+id/artistTxt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/artistImg"
android:text="Artist"
android:textColor="@color/black"
android:textSize="15sp"
android:textStyle="bold" />
<TextView
android:id="@+id/songNameTxt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/artistTxt"
android:layout_toRightOf="@id/artistImg"
android:text="Song Name"
android:textColor="#11ca6b" />
<ImageView
android:id="@+id/playB"
android:layout_width="30sp"
android:layout_height="30sp"
android:layout_marginTop="4sp"
android:layout_toLeftOf="@id/stopB"
android:src="@drawable/play_black" />
<ImageView
android:id="@+id/stopB"
android:layout_width="30sp"
android:layout_height="30sp"
android:layout_alignParentRight="true"
android:layout_marginTop="4sp"
android:src="@drawable/stop_black" />
</RelativeLayout>
Мой fragment_song.xml
макет:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/constrainLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@id/artistImg"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:alpha="0.4"
android:background="@color/black"
android:scaleType="centerCrop"
android:src="@drawable/edsher" />
<de.hdodenhof.circleimageview.CircleImageView
android:id="@id/artistImg"
android:layout_width="250sp"
android:layout_height="250sp"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="75sp"
android:src="@drawable/edsher"
app:civ_border_color="@color/white"
app:civ_border_width="2sp" />
<TextView
android:id="@id/songNameTxt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/artistImg"
android:layout_centerInParent="true"
android:layout_marginTop="10sp"
android:text="Song name" />
<TextView
android:id="@+id/currentSongLenght"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/songNameTxt"
android:layout_marginTop="9sp"
android:layout_toLeftOf="@id/songLenght"
android:text="03:00" />
<TextView
android:id="@+id/currentSongLeft"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/songNameTxt"
android:layout_marginTop="9sp"
android:layout_toRightOf="@id/songLenght"
android:text="-02:20" />
<SeekBar
android:id="@+id/songLenght"
android:layout_width="300sp"
android:layout_height="wrap_content"
android:layout_below="@id/songNameTxt"
android:layout_centerInParent="true"
android:layout_marginTop="10sp" />
<ImageView
android:id="@+id/previousB"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_below="@id/songLenght"
android:layout_toLeftOf="@id/playB"
android:src="@drawable/previous" />
<ImageView
android:id="@id/playB"
android:layout_width="70sp"
android:layout_height="70sp"
android:layout_below="@id/songLenght"
android:layout_centerInParent="true"
android:src="@drawable/play_big" />
<ImageView
android:id="@+id/nextB"
android:layout_width="60sp"
android:layout_height="60sp"
android:layout_below="@id/songLenght"
android:layout_toRightOf="@id/playB"
android:src="@drawable/next" />
<ImageView
android:id="@+id/favoriteB"
android:layout_width="40sp"
android:layout_height="40sp"
android:layout_below="@id/songLenght"
android:layout_alignParentEnd="true"
android:layout_marginTop="10sp"
android:src="@drawable/favorite" />
</RelativeLayout>