Android PagerSlidingTastrip(com.astuetz.PagerSlidingTastrip)如何在运行时动态添加选项卡?
我在应用程序中使用Android PagerSlidingTastrip(com.astuetz.PagerSlidingTastrip)如何在运行时动态添加选项卡?,android,android-fragments,android-studio,android-viewpager,pagerslidingtabstrip,Android,Android Fragments,Android Studio,Android Viewpager,Pagerslidingtabstrip,我在应用程序中使用com.astuetz.PagerSlidingTabStrip来呈现应用程序中的几个选项卡。我的要求是,当用户单击某个内容时,或者滑动到选项卡的最后一个右端时,我需要添加更多选项卡。我查看了几乎所有的stackoverflow线程,但找不到任何适当的帮助 下面是我正在做的工作-布局文件(XML): 片段: public class MandiEntryAddTabFragment extends BaseFragment { private ViewPager v
com.astuetz.PagerSlidingTabStrip
来呈现应用程序中的几个选项卡。我的要求是,当用户单击某个内容时,或者滑动到选项卡的最后一个右端时,我需要添加更多选项卡。我查看了几乎所有的stackoverflow线程,但找不到任何适当的帮助
下面是我正在做的工作-布局文件(XML):
片段:
public class MandiEntryAddTabFragment extends BaseFragment {
private ViewPager viewPager;
private View view;
private PagerSlidingTabStrip mTabs;
private MyFragmentPagerAdapter mAdapter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
if (view == null) {
view = inflater.inflate(R.layout.fragment_mandi_add, container, false);
if (viewPager == null) {
viewPager = (ViewPager)view.findViewById(R.id.pager);
}
getBaseActivity().setTitle("Material Entry");
FragmentManager manager = getChildFragmentManager();
viewPager.setAdapter(mAdapter = new MyFragmentPagerAdapter(manager));
mTabs = (PagerSlidingTabStrip) view.findViewById(R.id.tabs);
mTabs.setViewPager(viewPager);
}
return view;
}
class MyFragmentPagerAdapter extends FragmentPagerAdapter {
public MyFragmentPagerAdapter(FragmentManager fm) {
super(fm);
}
private ArrayList<String> tabs = new ArrayList<>();
@Override
public Fragment getItem(int item) {
Fragment fragment = null;
if (item == 0) {
fragment = new MandiEntryFragment();
} else if (item == 1) {
fragment = new MandiEntryFarmerFragment();
} else if (item == 2) {
fragment = new MandiEntryFarmerFragment();
} else if (item == 3) {
fragment = new MandiEntryFarmerFragment();
} else if (item == 4) {
fragment = new MandiEntryFarmerFragment();
}/* else if (item == 5) {
fragment = new MandiEntryFarmerFragment();
new MyFragmentPagerAdapter(getChildFragmentManager()).addTab("test " + (mAdapter.getCount() + 1));
}*/
return fragment;
}
@Override
public int getCount() {
return tabs.size();
}
@Override
public CharSequence getPageTitle(int position) {
String title = new String();
if (position == 0) {
title = "Entry";
} else if (position == 1) {
title = "Farmer 1";
} else if (position == 2) {
title = "Farmer 2";
} else if (position == 3) {
title = "Farmer 3";
} else if (position == 4) {
title = "Farmer 4";
tabs.get(position);
} /*else if (position == 5) {
title = "Add";
public CharSequence getPageTitle(int position) { return tabs.get(position);
}
}*/
return title;
}
public void addTab(String tab) {
tabs.add(tab);
notifyDataSetChanged();
mTabs.notifyDataSetChanged();
}
}
@Override
public void fetchAndShowData() {
Fragment fragment = getActiveFragment(viewPager);
if (fragment != null) {
((BaseFragment) fragment).fetchAndShowData();
}
}
}
公共类MandinEntryAddTabFragment扩展了BaseFragment{
私人视页机视页机;
私人视野;
私人寻呼机SlidingAbstrip MTAB;
私人MyFragmentPagerAdapter mAdapter;
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
如果(视图==null){
视图=充气机。充气(R.layout.fragment\u mandi\u add,container,false);
if(viewPager==null){
viewPager=(viewPager)view.findViewById(R.id.pager);
}
getBaseActivity().setTitle(“物料输入”);
FragmentManager=getChildFragmentManager();
setAdapter(mAdapter=newMyFragmentPageRadapter(管理器));
mTabs=(PagerSlidingTabStrip)view.findViewById(R.id.tabs);
mTabs.setViewPager(viewPager);
}
返回视图;
}
类MyFragmentPagerAdapter扩展了FragmentPagerAdapter{
公共MyFragmentPagerAdapter(FragmentManager fm){
超级(fm);
}
私有ArrayList选项卡=新建ArrayList();
@凌驾
公共片段getItem(int项){
片段=空;
如果(项==0){
片段=新的下颌片段();
}否则,如果(项目==1){
片段=新的下颌FarmerFragment();
}否则,如果(项目==2){
片段=新的下颌FarmerFragment();
}否则,如果(项目==3){
片段=新的下颌FarmerFragment();
}否则,如果(项目==4){
片段=新的下颌FarmerFragment();
}/*否则,如果(项目==5){
片段=新的下颌FarmerFragment();
新建MyFragmentPagerAdapter(getChildFragmentManager()).addTab(“测试”+(mAdapter.getCount()+1));
}*/
返回片段;
}
@凌驾
public int getCount(){
返回tabs.size();
}
@凌驾
公共字符序列getPageTitle(int位置){
字符串标题=新字符串();
如果(位置==0){
title=“条目”;
}否则如果(位置==1){
title=“农民1”;
}否则如果(位置==2){
title=“农民2”;
}否则如果(位置==3){
title=“农民3”;
}否则如果(位置==4){
title=“农民4”;
tabs.get(位置);
}/*否则如果(位置==5){
title=“添加”;
公共字符序列getPageTitle(int位置){返回tabs.get(位置);
}
}*/
返回标题;
}
公共无效添加选项卡(字符串选项卡){
选项卡。添加(选项卡);
notifyDataSetChanged();
mTabs.notifyDataSetChanged();
}
}
@凌驾
public void fetchAndShowData(){
Fragment Fragment=getActiveFragment(viewPager);
if(片段!=null){
((BaseFragment)fragment.fetchAndShowData();
}
}
}
我得到的错误是:
E/AndroidRuntime:java.lang.RuntimeException:无法启动活动
ComponentInfo{c2c.cloud4things.com/com.cloud4things.c2c.CommunityHomeActivity}:
java.lang.IndexOutOfBoundsException:索引4无效,大小为0
同样在上述片段的getPageTitle
和onCreateView
函数中。
我可以理解getCount
方法存在一些问题。但我不知道怎么做。请帮助我。线索是赞赏的。提前谢谢
public class MandiEntryAddTabFragment extends BaseFragment {
private ViewPager viewPager;
private View view;
private PagerSlidingTabStrip mTabs;
private MyFragmentPagerAdapter mAdapter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
if (view == null) {
view = inflater.inflate(R.layout.fragment_mandi_add, container, false);
if (viewPager == null) {
viewPager = (ViewPager)view.findViewById(R.id.pager);
}
getBaseActivity().setTitle("Material Entry");
FragmentManager manager = getChildFragmentManager();
viewPager.setAdapter(mAdapter = new MyFragmentPagerAdapter(manager));
mTabs = (PagerSlidingTabStrip) view.findViewById(R.id.tabs);
mTabs.setViewPager(viewPager);
}
return view;
}
class MyFragmentPagerAdapter extends FragmentPagerAdapter {
public MyFragmentPagerAdapter(FragmentManager fm) {
super(fm);
}
private ArrayList<String> tabs = new ArrayList<>();
@Override
public Fragment getItem(int item) {
Fragment fragment = null;
if (item == 0) {
fragment = new MandiEntryFragment();
} else if (item == 1) {
fragment = new MandiEntryFarmerFragment();
} else if (item == 2) {
fragment = new MandiEntryFarmerFragment();
} else if (item == 3) {
fragment = new MandiEntryFarmerFragment();
} else if (item == 4) {
fragment = new MandiEntryFarmerFragment();
}/* else if (item == 5) {
fragment = new MandiEntryFarmerFragment();
new MyFragmentPagerAdapter(getChildFragmentManager()).addTab("test " + (mAdapter.getCount() + 1));
}*/
return fragment;
}
@Override
public int getCount() {
return tabs.size();
}
@Override
public CharSequence getPageTitle(int position) {
String title = new String();
if (position == 0) {
title = "Entry";
} else if (position == 1) {
title = "Farmer 1";
} else if (position == 2) {
title = "Farmer 2";
} else if (position == 3) {
title = "Farmer 3";
} else if (position == 4) {
title = "Farmer 4";
tabs.get(position);
} /*else if (position == 5) {
title = "Add";
public CharSequence getPageTitle(int position) { return tabs.get(position);
}
}*/
return title;
}
public void addTab(String tab) {
tabs.add(tab);
notifyDataSetChanged();
mTabs.notifyDataSetChanged();
}
}
@Override
public void fetchAndShowData() {
Fragment fragment = getActiveFragment(viewPager);
if (fragment != null) {
((BaseFragment) fragment).fetchAndShowData();
}
}
}