Данные не обновляются в recyclerview мгновенно - PullRequest
0 голосов
/ 03 августа 2020

У меня есть действие, называемое 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();
}

Как заполнить данные после ввода действия вместо перехода ко второму фрагменту и переходу к первому? Какую ошибку я сделал? Как решить эту проблему?.

...