[英]Android Tabbed activity duplicating tabs
Something weird is happening here, i created an rss feed app with view pager when i go to 2nd tab from the 1st tab , the contents of 3rd tab are coming to 2nd tab . 这里发生了一些奇怪的事情,当我从第一个选项卡转到第二个选项卡时,我用视图分页器创建了一个RSS提要应用程序, 第三个选项卡的内容正在第二个选项卡中 。 When I go to the 1st tab from 2nd tab , the contents of 1st tab are coming to 2nd tab .
当我去到从第二选项卡中的第一个选项卡 , 第一次选项卡的内容来第2标签 。 something mixing without any logic (or i could not find the logic), why it is happening.. ?
没有任何逻辑的某种混合(或者我找不到逻辑),为什么会这样。 is there any way of clearing the current tab before going to next tab ?( don't know this is the correct question i supposed to ask )
有没有办法在转到下一个选项卡之前清除当前选项卡?(不知道这是我应该问的正确问题)
Here is my code 这是我的代码
public class datafragment extends Fragment {
View view;
ViewPager viewPager;
TabLayout tabLayout;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
view= inflater.inflate(R.layout.sample,container,false);
viewPager = (ViewPager) view.findViewById(R.id.viewpager);
viewPager.setAdapter(new sliderAdapter(getChildFragmentManager()));
tabLayout = (TabLayout) view.findViewById(R.id.sliding_tabs);
tabLayout.post(new Runnable() {
@Override
public void run() {
tabLayout.setupWithViewPager(viewPager);
}
});
return view;
}
private class sliderAdapter extends FragmentPagerAdapter{
final String tabs[]={"tab1", "tab2","tab3"};
public sliderAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
Fragment fragment= null;
switch (position){
case 0:
fragment = new RssFragment();
break;
case 1:
fragment = new RssFragment1();
break;
case 2:
fragment = new RssFragment2();
break;
}
return fragment;
}
@Override
public int getCount() {
return 3;
}
@Override
public CharSequence getPageTitle(int position) {
return tabs[position];
}
}
}
After adding the answer 添加答案后
public class datafragment extends Fragment {
View view;
ViewPager viewPager;
TabLayout tabLayout;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
view= inflater.inflate(R.layout.sample,container,false);
viewPager = (ViewPager) view.findViewById(R.id.viewpager);
viewPager.setAdapter(new SliderAdapter(getChildFragmentManager()));
tabLayout = (TabLayout) view.findViewById(R.id.sliding_tabs);
// tabLayout.post(new Runnable() {
// @Override
// public void run() {
// tabLayout.setupWithViewPager(viewPager);
// }
// });
**setupViewPager(viewPager);**
return view;
}
private void setupViewPager(ViewPager viewPagerProfile)
{
SliderAdapter adapter = new SliderAdapter (getActivity().getSupportFragmentManager());
adapter.addFragment(new RssFragment(), "tab1");
adapter.addFragment(new RssFragment1(), "tab2");
adapter.addFragment(new RssFragment2(), "tab3");
viewPagerProfile.setAdapter(adapter);
}
public class SliderAdapter extends FragmentPagerAdapter
{
private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();
public SliderAdapter (FragmentManager manager)
{
super(manager);
}
@Override
public Fragment getItem(int position)
{
return mFragmentList.get(position);
}
@Override
public int getCount()
{
return mFragmentList.size();
}
public void addFragment(Fragment fragment, String title)
{
mFragmentList.add(fragment);
mFragmentTitleList.add(title);
}
@Override
public CharSequence getPageTitle(int position)
{
return null;
}
}
}
Try this way: 尝试这种方式:
private void setupViewPager(ViewPager viewPagerProfile)
{
SliderAdapter adapter = new SliderAdapter (getSupportFragmentManager());
adapter.addFragment(new RssFragment(), "tab1");
adapter.addFragment(new RssFragment1(), "tab2");
adapter.addFragment(new RssFragment2(), "tab3");
viewPagerProfile.setAdapter(adapter);
}
Custom Adapter: 自定义适配器:
public class SliderAdapter extends FragmentPagerAdapter
{
private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();
public SliderAdapter (FragmentManager manager)
{
super(manager);
}
@Override
public Fragment getItem(int position)
{
return mFragmentList.get(position);
}
@Override
public int getCount()
{
return mFragmentList.size();
}
public void addFragment(Fragment fragment, String title)
{
mFragmentList.add(fragment);
mFragmentTitleList.add(title);
}
@Override
public CharSequence getPageTitle(int position)
{
return null;
}
}
If you want to do something on selected fragment, Add listenre: 如果要对选定的片段执行某些操作,请添加侦听器:
TabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener()
{
@Override public void onTabSelected(TabLayout.Tab tab)
{
//Code here for selected fragment
}
@Override public void onTabUnselected(TabLayout.Tab tab)
{
}
@Override public void onTabReselected(TabLayout.Tab tab)
{
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.