У меня есть действие, называемое ArtistDetailActivity , в действии у меня есть пейджер . Из потока операций переходит к классу адаптера пейджера. У меня есть два фрагмента для просмотра пейджера. Фрагмент трека и Фрагмент альбома . У обоих фрагментов есть recyclerview, и для данных, которые нужно установить в recycerview, я использую класс TrackListAdapter для TrackFragment. Моя проблема в том, что данные для фрагмента трека не обновляются мгновенно. Он обновляется только тогда, когда я go до фрагмент альбома и возвращаюсь к Trackfragment .
Ниже приведен код из ArtistDetailActivity
artistPagerAdapter = new ArtistPagerAdapter(getSupportFragmentManager(), songs,
albumList
, trackLoadMore, albumLoadMore, songId, stateValue);
songsPager.setAdapter(artistPagerAdapter);
tabLayout.setupWithViewPager(songsPager);
songsPager.setCurrentItem(pagerPosition);
параметры song и albumList - это данные, которые я получаю из API.
Ниже приведен код из ArtistPagerAdapter
@Override
public Fragment getItem(int i) {
switch (i) {
case 0:
return loadFragment(new TrackFragment(), true);
case 1:
return loadFragment(new AlbumFragment(), false);
default:
return null;
}
}
@Override
public int getCount() {
return 2;
}
private Fragment loadFragment(Fragment fragment, boolean isTrack) {
Bundle args = new Bundle();
if (isTrack) {
args.putParcelableArrayList("songsList", (ArrayList<? extends Parcelable>) msongs);
args.putBoolean("LoadMore", mTrackloadMore);
} else {
args.putParcelableArrayList("songsList", (ArrayList<? extends Parcelable>) malbumList);
args.putBoolean("LoadMore", mAlbumloadMore);
}
args.putString("songId", songIdValue);
args.putInt("state", stateValue);
fragment.setArguments(args);
return fragment;
}
Ниже кода от TrackFragment
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_track, container, false);
List<Song> msongs = getArguments().getParcelableArrayList("songsList");
songId = getArguments().getString("songId");
stateValue = getArguments().getInt("state");
artistTrackRecyclerView = view.findViewById(R.id.song_list);
ImageButton moreButton = view.findViewById(R.id.btnMore);
if (getArguments().getBoolean("LoadMore", false))
moreButton.setVisibility(View.VISIBLE);
else
moreButton.setVisibility(View.GONE);
songListAdapter = new ArtistListAdapter(getActivity(), msongs, songId, stateValue);
artistTrackRecyclerView.addItemDecoration(new PlaylistDetailItemDecoration(getActivity()));
artistTrackRecyclerView.setNestedScrollingEnabled(false);
artistTrackRecyclerView.setAdapter(songListAdapter);
songListAdapter.notifyDataSetChanged();
moreButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
moreButton.setVisibility(View.GONE);
callback.onTrackMoreClick();
}
});
return view;
}
Ниже приведен код от ArtistListAdapter
@Override
public ArtistListAdapter.ArtistViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int
i) {
Log.e(TAG, "onCreateViewHolder: " );
View view = LayoutInflater.from(activity).inflate(R.layout.songs, viewGroup,
false);
return new ArtistListAdapter.ArtistViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ArtistListAdapter.ArtistViewHolder artistHolder, int
position) {
Log.e(TAG, "onBindViewHolder: " );
artistHolder.songTextView.setText(songs.get(position).getName());
artistHolder.artistTextView.setText(songs.get(position).getArtist());
}
@Override
public int getItemCount() {
return songs.size();
}
Как заполнить данные после ввода действия вместо перехода ко второму фрагменту и переходу к первому? Какую ошибку я сделал? Как решить эту проблему?.