Я пытаюсь создать раскладку вкладок в своем новостном приложении. В настоящее время мое приложение создает подменю ящика из значений общих предпочтений. Эти подменю в основном представляют собой категории. Когда пользователь нажимает на любую категорию, фрагмент перезагружается с новыми данными. Я пытаюсь перенести ту же функциональность в tablayout, поскольку это намного удобнее, но не получается заставить его работать.
Вот код класса MainAcitivity для ящика, который я используйте:
public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {
private DataViewModel dataViewModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
if(SharedPrefernces.getUseNightMode()) {
setTheme(R.style.AppThemeDark);
}
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
DrawerLayout drawer = findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.addDrawerListener(toggle);
toggle.syncState();
navigationView = findViewById(R.id.nav_view);
addNavigationMenuItem(navigationView);
navigationView.setNavigationItemSelectedListener(this);
// Get a new or existing ViewModel from the ViewModelProvider.
dataViewModel = ViewModelProviders.of(this).get(DataViewModel.class);
}
private void addNavigationMenuItem (NavigationView navView) {
Menu menu = navView.getMenu();
SubMenu subMenu = menu.addSubMenu(getString(R.string.my_interests));
if(SharedPrefernces.getUserInterests()!=null) {
List<String> my_interests = SharedPrefernces.getUserInterests();
Collections.sort(my_interests, String::compareToIgnoreCase);
my_interests.add(0,getString(R.string.all_stories));
int count = 1;
for (String interest:my_interests) {
boolean checked = SharedPrefernces.getActiveInterest().equalsIgnoreCase(interest);
subMenu.add(0, Menu.FIRST + count++, Menu.FIRST, interest).setIcon(getDrawable(R.drawable.ic_news_drawer)).setCheckable(true).setChecked(checked);
}
}
}
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
unCheckAllMenuItems(navigationView.getMenu());
//item.setChecked(true);
String title = item.getTitle().toString();
if(!SharedPrefernces.getActiveInterest().equalsIgnoreCase(title)) {
SharedPrefernces.setActiveInterest(title);
//clear feeds and send flag to reload feeds fragment
dataViewModel.deleteAllArticles();
SharedPrefernces.setReloadArticles(true);
LocalMessageManager.getInstance().send(R.id.reload_feeds);
}
DrawerLayout drawer = findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
}
Вот что я сейчас пытаюсь, но заголовки вкладок пусты и данные загружаются из случайной категории и во всех вкладках, а не по отдельности:
TabsFragment :
public class HomeTabsFragment extends Fragment {
private View view;
TabLayout mTabLayout;
ViewPager mViewPager;
Adapter mPagerAdapter;
List<String> tabItems = new ArrayList<>();
private DataViewModel dataViewModel;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
this.view = inflater.inflate(R.layout.fragment_articles_tabs, container, false);
dataViewModel = ViewModelProviders.of(this).get(DataViewModel.class);
mViewPager = (ViewPager) view.findViewById(R.id.home_list_tabs_container);
mTabLayout = (TabLayout) view.findViewById(R.id.home_list_tabs);
mPagerAdapter = new Adapter(getFragmentManager());
mViewPager.setAdapter(mPagerAdapter);
mTabLayout.setupWithViewPager(mViewPager);
if(SharedPrefernces.getUserInterests()!=null) {
List<String> my_interests = SharedPrefernces.getUserInterests();
Collections.sort(my_interests, String::compareToIgnoreCase);
my_interests.add(0, getString(R.string.all_stories));
int count = 1;
for (String interest : my_interests) {
addTab(interest + count++);
if(!SharedPrefernces.getActiveInterest().equalsIgnoreCase(interest)) {
SharedPrefernces.setActiveInterest(interest);
//clear feeds and send flag to reload feeds fragment
dataViewModel.deleteAllArticles();
SharedPrefernces.setReloadArticles(true);
LocalMessageManager.getInstance().send(R.id.reload_feeds);
}
}
}
return view;
}
private void addTab(String title) {
mTabLayout.addTab(mTabLayout.newTab().setText(title));
addTabPage(title);
}
public void addTabPage(String title) {
tabItems.add(title);
mPagerAdapter.notifyDataSetChanged();
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
// Do something that differs the Activity's menu here
super.onCreateOptionsMenu(menu, inflater);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
return false;
}
class Adapter extends FragmentPagerAdapter {
public Adapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return FeedsFragment.newInstance();
}
@Override
public int getCount() {
return tabItems.size();
}
@Override
public CharSequence getPageTitle(int position) {
return tabItems.get(position);
}
}
}
Не знаю, как мне этого добиться, поэтому нужна помощь.