我不想每次都刷新我的标签片段,虽然我的标签已被选中
我用View-pager
设置选项卡。内部类别选项卡,当我点击任何类别的负载数据从互联网,我隐藏所有类别和数据加载recycleview
内。但现在当我点击类别选项卡时,我希望在查看之前可见。请注意:我想单击相同的选项卡,每次需要刷新。请检查图像以获得更好的理解。请检查我的采用者课程。我不想每次都刷新我的标签片段,虽然我的标签已被选中
viewPager = (CustomViewPager) findViewById(R.id.tabs_viewpager);
// viewPager.setPagingEnabled(false);
tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.setupWithViewPager(viewPager);
tabFragmentPagerAdapter = new TabFragmentPagerAdapter(getSupportFragmentManager(), MainActivity.this, viewPager);
tabFragmentPagerAdapter.addFrag(new FeatureFragment(), "Feature");
tabFragmentPagerAdapter.addFrag(new DiscoverFragment(), "Discover");
tabFragmentPagerAdapter.addFrag(new TopFragment(), "Top");
tabFragmentPagerAdapter.addFrag(new CategoryFragment(), "Category");
// setupViewPager(viewPager);
viewPager.setAdapter(tabFragmentPagerAdapter);
我采纳者类
public class TabFragmentPagerAdapter extends FragmentPagerAdapter {
private final List<Fragment> mfragmentlist = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();
FragmentManager fragmentManager;
final int[] ICONS = new int[]{
R.drawable.feature,
R.drawable.discover,
R.drawable.top,
R.drawable.category};
public Context context;
public ViewPager viewPager;
public TabFragmentPagerAdapter(FragmentManager fm, Context context, ViewPager viewPager) {
super(fm);
this.context = context;
this.viewPager = viewPager;
this.fragmentManager = fm;
}
public View getTabView(int position) {
// Given you have a custom layout in `res/layout/custom_tab.xml` with a TextView and ImageView
View v = LayoutInflater.from(context).inflate(R.layout.custom_tab, null);
final TextView tv = (TextView) v.findViewById(R.id.textViewMainTabFrag);
tv.setText(mFragmentTitleList.get(position));
ImageView img = (ImageView) v.findViewById(R.id.imgView);
img.setImageResource(ICONS[position]);
return v;
}
public void SetOnSelectView(TabLayout tabLayout, int position) {
TabLayout.Tab tab = tabLayout.getTabAt(position);
View selected = tab.getCustomView();
TextView iv_text = (TextView) selected.findViewById(R.id.textViewMainTabFrag);
iv_text.setTextColor(context.getResources().getColor(R.color.apps_color));
}
public void SetUnSelectView(TabLayout tabLayout, int position) {
TabLayout.Tab tab = tabLayout.getTabAt(position);
View selected = tab.getCustomView();
TextView iv_text = (TextView) selected.findViewById(R.id.textViewMainTabFrag);
iv_text.setTextColor(context.getResources().getColor(R.color.black));
}
public void addFrag(Fragment fragment, String title) {
mfragmentlist.add(fragment);
mFragmentTitleList.add(title);
}
/* @Override
public Fragment getItem(int position) {
return ItemFragment.newInstance();
}*/
@Override
public Fragment getItem(int position) {
return mfragmentlist.get(position);
}
@Override
public int getCount() {
return mFragmentTitleList.size();
}
@Override
public CharSequence getPageTitle(int position) {
return mFragmentTitleList.get(position);
}
}
主要活动OnTabSelectedListener
这里将是重装activity
不错的选择。但如何如何看到我的看法
@Override
public void onTabUnselected(TabLayout.Tab tab) {
int c = tab.getPosition();
tabFragmentPagerAdapter.SetUnSelectView(tabLayout, c);
}
您可以使用setUserVisibleHint
:
在你fragment
:
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser){
//do something //Load or Refresh Data
}
}
OR
在你Activity
:
viewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
// do something //Load or Refresh Data
}
});
检查this解决方案
是你的问题解决了[email protected] –
没有..还是尽量解决 –
你去哪里stucked? –
尝试......
public class ListCanali extends Fragment implements OnPageChangeListener{
private MyAdapter mAdapter;
@Override
public View OnCreateView (...) {
...
if(mAdapter == null) {
mAdapter = new MyAdapter(getChildFragmentManager());
}
viewPager.setAdapter(mAdapter);
viewPager.setOnPageChangeListener(this);
...
}
@Override
public void OnPageSelected (int position) {
switch (position){
case 0 :
((FragmentCanali)adapter.getItem(position)).refresh();
case 1 :
((FragmentPreferiti)adapter.getItem(position)).refresh();
}
}
((CategoryFragment)mAdapter.getItem(3).REFRESH()); refresh()not found –
@ t.gakk你需要在你的类中创建这个函数来刷新。 –
显示适配器。 – Ankita
试试这个https://*.com/questions/19744261/how-to-update-refresh-fragment-in-viewpager-by-main-activity-programmatically – Ankita
请检查您想更新你的片段在我的编辑代码 –