Я использую Android TabLayout
для генерации tabs
с FragmentStatePagerAdapter
как adapter
. Теперь с этим кодом он генерирует items
на каждом tab
, когда я его прокручиваю.
SongManager.getAudioListFromResponse(result)
дает List
из Audio
объектов, каждый из которых имеет String
, называемый жанром. Например, первое аудио имеет жанр рок, а второе - жанр блюз.
getItem()
в SongListAdapter
создает новый фрагмент, который использует атрибуты одного Audio
и добавляет его к recylerview
для отображения. (Я могу добавить SongListFragment
, если необходимо).
На данный момент этот код заполняет все вкладки одинаковыми Fragments
. Неважно, какой tab
я выберу, они все одинаковые.
Мой вопрос будет .. Как я могу сделать так, чтобы он получил Audio's genre
и отсортировал его соответственно.
Или как я могу поймать в main activity
Songmanager.getSonglist ... что вкладка поменялась местами и каков заголовок вкладки.
А также как мне сделать так, чтобы при выборе я мог добавить песню на вкладку recommended
.
Вот код, где я создаю TabLayout
:
SongManager.getSonglist(getApplicationContext(), new OkHttp3Connection.OkHttp3RequestCallback() {
@Override
public void onSuccess(String result, String user_tag) {
ViewPager viewPager = findViewById(R.id.viewpager);
SongListAdapter songListAdapter =
new SongListAdapter(getSupportFragmentManager(), getApplicationContext());
songListAdapter.setAudioList(SongManager.getAudioListFromResponse(result));
viewPager.setAdapter(songListAdapter);
// Give the TabLayout the ViewPager
TabLayout tabLayout = findViewById(R.id.tab_layout);
tabLayout.setupWithViewPager(viewPager);
songListAdapter.setItemListener(new SongListAdapter.SongListViewPagerListViewItemListener() {
@Override
public void onClick(Audio audio) {
goToCameraView();
songGraph.setAudio(audio);
}
});
// Iterate over all tabs and set the custom view
for (int i = 0; i < tabLayout.getTabCount(); i++) {
TabLayout.Tab tab = tabLayout.getTabAt(i);
if (tab != null) {
tab.setCustomView(songListAdapter.getTabView(i));
}
}
}
@Override
public void onError(String error, String user_tag) {
System.out.println("HTTP Error: " + error);
}
});
и весь SongListAdapter
класс:
public class SongListAdapter extends FragmentStatePagerAdapter {
String tabTitles[] = new String[]{"Recommended", "Popular", "Rock", "Pop", "Blues", "Chill"};
Context context;
private ArrayList<Audio> audioList;
public SongListAdapter(FragmentManager fm, Context context) {
super(fm);
this.context = context;
}
@Override
public int getCount() {
return tabTitles.length;
}
@Override
public SongListFragment getItem(int position) {
SongListFragment slf = new SongListFragment();
slf.setAudioList(getAudioList());
slf.setItemOnClickListener(new SongListFragment.SongListItemOnClickListener() {
@Override
public void onClick(Audio audio) {
System.out.println("asdfdas");
itemListener.onClick(audio);
}
});
return slf;
}
@Override
public CharSequence getPageTitle(int position) {
// Generate title based on item position
return tabTitles[position];
}
public View getTabView(int position) {
View tab = LayoutInflater.from(context).inflate(R.layout.custom_tab, null);
TextView tv = tab.findViewById(R.id.custom_text);
tv.setText(tabTitles[position]);
return tab;
}
public ArrayList<Audio> getAudioList() {
return audioList;
}
public void setAudioList(ArrayList<Audio> audioList) {
this.audioList = audioList;
}
SongListViewPagerListViewItemListener itemListener;
public void setItemListener(SongListViewPagerListViewItemListener itemListener) {
this.itemListener = itemListener;
}
public interface SongListViewPagerListViewItemListener {
void onClick(Audio audio);
}
}
Весь результат выглядит так: