Intereting Posts
Как отображать близлежащие места, такие как atm, больницы в android google map? Android onClick в XML против OnClickListener Значение AudioSource для USB-микрофона на Android Откройте URL-адрес в браузере Android, избегайте нескольких вкладок Приемник широковещательной передачи не работает в ICS, если приложение не запускается по крайней мере один раз Android – Как определить, когда запускается приложение для 3D-вечеринки SecurityProvider в тестах Mockito при работе вместе с Robolectric Как правильно реализовать Parcelable с ArrayList <Parcelable>? Android NDK – поддерживает прямой ARM-код или просто Thumb Поддерживает ли «Samsung Apps» схему URI для перенаправления на конкретные приложения? Google Cloud messaging – пример сервера YouTubePlayerFragment в ListView с ошибкой AppCompatActivity Разверните приложение через Google Play Store на частном канале без Google Apps? Как определить ширину экрана в терминах dp или dip во время выполнения в Android? Индикатор выполнения в панели уведомлений при загрузке изображения?

Получить фрагмент по тегу или id из tablayout, android

Я использую этот учебник для создания вкладки. И теперь у меня есть recyclerview в каждом фрагменте, и я хочу уведомить их из mainactivity. Как получить доступ к адаптеру во фрагменте?

Я использую это для вызова метода refreshData () в фрагменте:

TabFragment1 tabFragment = (TabFragment1) getSupportFragmentManager().findFragmentByTag(TabFragment1.class.getSimpleName()); if (tabFragment != null) { tabFragment.refreshData(); } 

Но это возвращает null.

основная деятельность:

 TabLayout tabLayout = (TabLayout) findViewById(R.id.tabLayout); tabLayout.addTab(tabLayout.newTab().setText("Tab1")); tabLayout.addTab(tabLayout.newTab().setText("Tab2")); final PagerAdapter adapter = new PagerAdapter (getSupportFragmentManager(), tabLayout.getTabCount()); viewPager.setAdapter(adapter); viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { @Override public void onTabSelected(TabLayout.Tab tab) { viewPager.setCurrentItem(tab.getPosition()); } @Override public void onTabUnselected(TabLayout.Tab tab) { } @Override public void onTabReselected(TabLayout.Tab tab) { } }); 

PagerAdapter:

 public class PagerAdapter extends FragmentStatePagerAdapter { int mNumOfTabs; public PagerAdapter(FragmentManager fm, int NumOfTabs) { super(fm); this.mNumOfTabs = NumOfTabs; } @Override public Fragment getItem(int position) { switch (position) { case 0: TabFragment1 tab1 = new TabFragment1(); return tab1; case 1: TabFragment2 tab2 = new TabFragment2(); return tab2; case 2: TabFragment3 tab3 = new TabFragment3(); return tab3; case 3: TabFragment4 tab4 = new TabFragment4(); return tab4; default: return null; } } @Override public int getCount() { return mNumOfTabs; } } 

Один из myTabFragment:

  public CardAdapter adapter; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { RecyclerView v = (RecyclerView) inflater.inflate(R.layout.tab_fragment_1, container, false); SetupRecycleView(v); return v; } public void refreshData() { adapter.notifyDataSetChanged(); } void SetupRecycleView(RecyclerView recList) { recList.setHasFixedSize(true); LinearLayoutManager llm = new LinearLayoutManager(G.context); llm.setOrientation(LinearLayoutManager.VERTICAL); //recList.setLayoutManager(new GridLayoutManager(G.context, 2)); recList.setLayoutManager(llm); List<StructGhaza> ghazas = StructGhaza.getAllGhaza("2"); adapter = new CardAdapter(ghazas); recList.setAdapter(adapter); } 

CardAdapter:

  public class CardAdapter extends RecyclerView.Adapter<CardAdapter.GhazaViewHolder> { private List<StructGhaza> ghazas; public CardAdapter(List<StructGhaza> ghazaList) { this.ghazas = ghazaList; } @Override public int getItemCount() { return ghazas.size(); } @Override public void onBindViewHolder(GhazaViewHolder ghazaViewHolder, int position) { StructGhaza ghaza = ghazas.get(position); ghazaViewHolder.vTitle.setText(ghaza.Name); //----Load Image Glide.with(G.context) .load(ghaza.Aks) .placeholder(R.drawable.loading_spinner) .crossFade() .into(ghazaViewHolder.itemImg); //--------------- ghazaViewHolder.Rate.setRating(ghaza.Star); ghazaViewHolder.sampleLayout.setHoverView(ghazaViewHolder.hover); ghazaViewHolder.sampleLayout.addChildAppearAnimator(ghazaViewHolder.hover, R.id.tvHover, Techniques.FlipInX); ghazaViewHolder.sampleLayout.addChildDisappearAnimator(ghazaViewHolder.hover, R.id.tvHover, Techniques.FlipOutX); } @Override public GhazaViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { View itemView = LayoutInflater. from(viewGroup.getContext()). inflate(R.layout.fragment_carditem, viewGroup, false); return new GhazaViewHolder(itemView); } public static class GhazaViewHolder extends RecyclerView.ViewHolder { protected TextView vTitle; protected BlurLayout sampleLayout; protected View hover; protected ImageView itemImg; protected RatingBar Rate; public GhazaViewHolder(View v) { super(v); sampleLayout = (BlurLayout) v.findViewById(R.id.sample); itemImg = (ImageView) v.findViewById(R.id.item_img); hover = LayoutInflater.from(G.context).inflate(R.layout.fragment_hover, null); vTitle = (TextView) v.findViewById(R.id.titleTv); Rate = (RatingBar) v.findViewById(R.id.rating); } } } 

Solutions Collecting From Web of "Получить фрагмент по тегу или id из tablayout, android"

EDIT: после многих тестов предыдущий ответ работает с Android <21, но для Android> 21 это немного странно, похоже, что он работает не так.

Наконец, я решил это так, и он работает повсюду:

В вашем адаптере:

  HashMap<Integer, Fragment> mPageReferenceMap = new HashMap<>(); @Override public Object instantiateItem(ViewGroup container, int position) { Fragment fragment = (Fragment) super.instantiateItem(container, position); mPageReferenceMap.put(position, fragment); return fragment; } @Override public void destroyItem(ViewGroup container, int position, Object object) { super.destroyItem(container, position, object); mPageReferenceMap.remove(position); } public Fragment getFragment(int key) { return mPageReferenceMap.get(key); } 

И вы вызываете getFragment, где хотите в своей деятельности:

 int index = viewPager.getCurrentItem(); ViewPagerAdapter adapter = ((ViewPagerAdapter)viewPager.getAdapter()); final YourFragment tabFragment = (YourFragment) adapter.getFragment(index); 

ПРЕДЫДУЩИЙ ОТВЕТ:

Внимание : на Android это не работает.


У меня такая же проблема. Наконец, я не использовал id или tag.

Вместо того, чтобы использовать:

 CustomFragment customFragment = (CustomFragment) getSupportFragmentManager().findFragmentByTag(getString(R.string.fragment_custo_tag)); 

использовать это:

 CustomFragment customFragment = (CustomFragment) getSupportFragmentManager().getFragments().get(0); 

Для получения экземпляра CustomFragment.

Я положил get (0), поскольку ваша позиция экземпляра CustomFragment равна нулю.

Я нашел эту проблему здесь: Установить и получить с помощью тега фрагмент в android