我正在使用Android TabLayout
生成tabs
为FragmentStatePagerAdapter
的{{1}}。现在,使用此代码,当我滚动它时,它会在每个adapter
上生成items
。
tab
给出SongManager.getAudioListFromResponse(result)
个对象中的List
个,每个对象都有一个Audio
类,称为流派。例如,第一个音频具有摇滚风格,第二个音频具有布鲁斯风格。
String
中的getItem()
制作了一个新的Fragment,它使用一个SongListAdapter
的属性并将其添加到要显示的Audio
中。 (如果需要,我可以添加recylerview
)。
此刻,此代码正在用相同的SongListFragment
填充所有选项卡。选择哪个Fragments
都没关系,它们都是一样的。
我的问题是..我怎样才能使它得到tab
并进行相应的排序。
或者如何在Audio's genre
Songmanager.getSonglist ...中捕捉到该标签已被交换以及该标签的标题是什么。
还有如何制作它,以便在选择时可以将歌曲添加到main activity
选项卡。
这是我创建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
整个结果如下:
答案 0 :(得分:2)
我将回答您的问题,即您想根据不同类型的流派显示不同的音频列表。
好的,所以我认为第一个问题是如何从SongsListAdapter的 getItem 方法(即
)返回片段的实例。@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;
}
在这里,您应该返回已根据流派过滤了AudioList的SongListFragment的不同实例。 因此,看起来可能像这样:
@Override
public SongListFragment getItem(int position) {
SongListFragment slf = new SongListFragment();
slf.setAudioList(filterBasedOnGenre(getAudioList(), tabTitles[position]));
slf.setItemOnClickListener(new SongListFragment.SongListItemOnClickListener() {
@Override
public void onClick(Audio audio) {
System.out.println("asdfdas");
itemListener.onClick(audio);
}
});
return slf;
}
public ArrayList<Audio> filterBasedOnGenre(ArrayList<Audio> audioList, String genreToFilter)
{
ArrayList<Audio> filteredAudioList = new ArrayList<>();
for (Audio audio : audioList) {
if (audio.getGenre().equalsIgnoreCase(genreToFilter)) {
filteredAudioList.add(audio);
}
}
return filteredAudioList;
}
考虑音频如下:
public class Audio {
public Audio(String songName, String singer, String genre) {
this.songName = songName;
this.singer = singer;
this.genre = genre;
}
private String songName;
private String singer;
private String genre;
public String getSongName() {
return songName;
}
public void setSongName(String songName) {
this.songName = songName;
}
public String getSinger() {
return singer;
}
public void setSinger(String singer) {
this.singer = singer;
}
public String getGenre() {
return genre;
}
public void setGenre(String genre) {
this.genre = genre;
}
}
希望有帮助。
让我知道是否需要更多帮助。
答案 1 :(得分:1)
所以您的解决方案对您自己有好处。 我目前正在使用媒体播放器应用程序,因此,如果您要缓存songadapater或创建缓存文件来存储数组对象所需的任何内容。
此方法写入缓存文件。
void createdcachedreadfile(Context con, String filename) throws IOException {
String tempfile = null;
for (Songpojo file : songpojoList) {
FileOutputStream fos = null;
try {
fos = con.openFileOutput(filename, Context.MODE_PRIVATE);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(songpojoList);
oos.close();
fos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
要检索
public Object readCaheFile(Context context1, String filename) throws IOException, ClassNotFoundException {
FileInputStream fis = context1.openFileInput(filename);
ObjectInputStream ois = new ObjectInputStream(fis);
Object object = ois.readObject();
return object;
}
也许这仍然很有帮助
祝您编程愉快!!!!