Я много искал, но не могу найти решение, которое подойдет для моего кода. На самом деле у меня есть tablayout во фрагменте и для tablayout я использую viewpager. Внутри окна просмотра есть 3 фрагмента. В моей деятельности есть один счетчик, который мне нужен, когда пользователь выбирает элемент из счетчика, после чего данные фрагментов окна просмотра должны быть изменены в соответствии с выбранным значением, но данные не обновляются.
Может ли кто-нибудь помочь в его решении. Я хочу, чтобы фрагмент видового пейджера обновлялся всякий раз, когда будет изменено выбранное значение прядильщика.
Мой код MainActivity:
binding.bottmNav.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
switch (menuItem.getItemId()) {
case R.id.location:
final AlertDialog.Builder mbuilder = new AlertDialog.Builder(HomeActivity.this);
View v = getLayoutInflater().inflate(R.layout.dialog_layout, null);
Button okbutton = v.findViewById(R.id.okbutton);
final Spinner spinner = (Spinner) v.findViewById(R.id.spinner);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(HomeActivity.this, android.R.layout.simple_spinner_item,
getResources().getStringArray(R.array.countries_list));
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
mbuilder.setView(v);
final AlertDialog dialog = mbuilder.create();
okbutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.e("Dialog123", "onClick: Positive" );
SharedPreferences prfs;
prfs = PreferenceManager.getDefaultSharedPreferences(HomeActivity.this);
SharedPreferences.Editor editor = prfs.edit();
editor.putString("savedvalue", spinner.getSelectedItem().toString());
editor.commit();
String text = spinner.getSelectedItem().toString();
newsModels = new ArrayList<>();
if(text.equals("INDIA")) {
newsModels.clear();
TypedArray indianewslogo = getResources().obtainTypedArray(R.array.indianews);
String[] indianewsname = getResources().getStringArray(R.array.indianewsnames);
String[] indianewsurl = getResources().getStringArray(R.array.indiahref);
for(int i =0; i<indianewslogo.length(); i++) {
//SendModel sendModel = new SendModel(indianewslogo.getResourceId(i,0),indianewsname[i]);
newsModels.add(new NewsModel(indianewslogo.getResourceId(i,0),indianewsname[i], indianewsurl[i]));
}
Singleton.getConstant().addNewsModel(newsModels);
TypedArray indiashopimg = getResources().obtainTypedArray(R.array.indiashopimg);
String [] indishopname = getResources().getStringArray(R.array.indiashopname);
String[] indiashopurl = getResources().getStringArray(R.array.indiashopurl);
sendModels = new ArrayList<>();
for(int j =0; j<indiashopimg.length(); j++){
SendModel sendModel = new SendModel(indiashopimg.getResourceId(j,0), indishopname[j], indiashopurl[j]);
sendModels.add(sendModel);
}
SendSingleton.getConstant().addNewsModel(sendModels);
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.frame_layout, homeFragment);
fragmentTransaction.commit();
binding.bottmNav.getMenu().findItem(R.id.location).setTitle("India");
binding.bottmNav.getMenu().findItem(R.id.home1).setChecked(true);
dialog.dismiss();
}else if(text.equals("USA")){
newsModels.clear();
TypedArray indianewslogo = getResources().obtainTypedArray(R.array.usnews);
String[] indianewsname = getResources().getStringArray(R.array.usnewsname);
String[] indianewsurl = getResources().getStringArray(R.array.usurl);
for(int i =0; i<indianewslogo.length(); i++) {
newsModels.add(new NewsModel(indianewslogo.getResourceId(i,0),indianewsname[i], indianewsurl[i]));
}
Singleton.getConstant().addNewsModel(newsModels);
Singleton.getConstant().addNewsModel(newsModels);
TypedArray indiashopimg = getResources().obtainTypedArray(R.array.usashopimg);
String [] indishopname = getResources().getStringArray(R.array.usashopname);
String[] indiashopurl = getResources().getStringArray(R.array.usashopurl);
sendModels = new ArrayList<>();
for(int j =0; j<indiashopimg.length(); j++){
SendModel sendModel = new SendModel(indiashopimg.getResourceId(j,0), indishopname[j], indiashopurl[j]);
sendModels.add(sendModel);
}
SendSingleton.getConstant().addNewsModel(sendModels);
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.frame_layout, homeFragment);
fragmentTransaction.commit();
binding.bottmNav.getMenu().findItem(R.id.location).setTitle("USA");
binding.bottmNav.getMenu().findItem(R.id.home1).setChecked(true);
dialog.dismiss();
}
HomeFragment (где находится видоискатель):
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
final FragmentHomeBinding homeBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_home, container, false);
sendModels = new ArrayList<>();
PagerAdapter pagerAdapter = new PagerAdapter(getChildFragmentManager(), homeBinding.tablayout.getTabCount());
homeBinding.viewpager1.setAdapter(pagerAdapter);
homeBinding.tablayout.setupWithViewPager(homeBinding.viewpager1);
homeBinding.viewpager1.getAdapter().notifyDataSetChanged();
homeBinding.tablayout.addOnTabSelectedListener(new TabLayout.BaseOnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
homeBinding.viewpager1.setCurrentItem(tab.getPosition());
}@Override
public void onTabUnselected(TabLayout.Tab tab) {
}@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
homeBinding.viewpager1.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(homeBinding.tablayout));
NewsFragment (где я хочу показать данные):
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
final FragmentNewsBinding binding= DataBindingUtil.inflate(inflater, R.layout.fragment_news, container, false);
View view = binding.getRoot();
newsModels = new ArrayList<>();
newsModels =Singleton.getConstant().getNewsModel();
GridLayoutManager gridLayoutManager =new GridLayoutManager(getContext(), 4);
binding.recylerview.setLayoutManager(gridLayoutManager);
binding.recylerview.setItemAnimator(new DefaultItemAnimator());
RecyclerAdapter adapter = new RecyclerAdapter(newsModels, getContext());
binding.recylerview.setAdapter(adapter);
return view;
}
ViewPagerAdapter Код:
public class PagerAdapter extends FragmentPagerAdapter {
private Map<Integer, String> mfragmenttags;
private FragmentManager mfragmentManager;
private String[] tabtitles= new String[]{"News", "Shopping", "Social"};
private int numofTabs;
public PagerAdapter(@NonNull FragmentManager fm, int numofTabs) {
super(fm);
mfragmentManager = fm;
this.numofTabs = numofTabs;
mfragmenttags = new HashMap<Integer, String>();
}
@Nullable
@Override
public CharSequence getPageTitle(int position) {
return tabtitles[position];
}
@NonNull
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return new NewsFragment();
case 1:
return new ShoppingFragment();
case 2:
return new SocialFragment();
default:
return null;
}
}
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
Object obj = super.instantiateItem(container, position);
if(obj instanceof Fragment ){
Fragment f = (Fragment)obj;
String tag = f.getTag();
mfragmenttags.put(position, tag);
}
return obj;
}
public Fragment getFragment(int position){
String tag = mfragmenttags.get(position);
if(tag == null){
return null;
}
return mfragmentManager.findFragmentByTag(tag);
}
@Override
public int getItemPosition(@NonNull Object object) {
return POSITION_NONE;
}
@Override
public int getCount() {
return numofTabs;
}
}