如何使用ViewPager在TabLayout的选项卡上设置页面标题



我正在尝试从模型类动态设置选项卡的标题。为此,我覆盖了 getPageTitle(int position( 方法,然后返回字符序列。但是,由于标题来自模型字段,因此我得到了重复项。如何仅返回唯一的字段名称作为页面标题?或者实现这一目标的最佳方法是什么。

例如,我想将作者的所有书籍分组到一个选项卡中。

好吧,这就是我的适配器的样子,非常简单:

public class BooksListsAdapter extends FragmentPagerAdapter {
private ArrayList<Books> listOfBooks= new ArrayList<>();
public BooksListsAdapter (FragmentManager fragmentManager, ArrayList<Books> listOfBooks) {
super(fragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
this.listOfBooks= listOfBooks;
}
@Override
public int getCount() {
return listOfBooks.size();
}
@NonNull
@Override
public Fragment getItem(int position) {
return BooksListFragment.newInstance(listOfBooks.get(position).getAuthor(), listOfBooks);
}
@Override
public CharSequence getPageTitle(int position){
return listOfBooks.get(position).getAuthor();// Would like this returns only individual author regardless how many books they have
}
}

这工作正常,除了使用重复的标题创建的选项卡,因此内容重复。但是,我已经将内容分组在相应的片段中。我只想删除重复的选项卡(重复相同作者姓名的选项卡(。

谢谢你的时间。

您可以根据您拥有的作者总数来制定ViewPager。对于每一页,您都将显示该作者的所有书籍。

public class BooksListsAdapter extends FragmentPagerAdapter {
private List<String> authors = new ArrayList<>();
private HashMap<String, List<Books>> booksMap = new HashMap<>(); // author is key, list of book of this author is value
public BooksListsAdapter(FragmentManager fragmentManager, ArrayList<Books> listOfBooks) {
super(fragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
setBooksWithAuthor(listOfBooks);
// LOGIC to order tab go here. Tab order <=> authors list order
// Example: Order tab by author name: Collections.sort(authors);
}
private void setBooksWithAuthor(ArrayList<Books> books) {
for (Books book : books) {
if (booksMap.containsKey(book.getAuthor())) {
booksMap.get(book.getAuthor()).add(book);
} else {
booksMap.put(book.getAuthor(), new ArrayList<Books>() {{
add(book);
}});
authors.add(book.getAuthor());
}
}
}
@Override
public int getCount() {
return authors.size(); // total page = total author
}
@NonNull
@Override
public Fragment getItem(int position) {
String author = authors.get(position);
return BooksListFragment.newInstance(author, booksMap.get(author));
}
@Override
public CharSequence getPageTitle(int position) {
return authors.get(position);
}
}

希望对你有帮助

最新更新