我正在使用带有视图寻呼机的Tab布局并动态添加片段。现在我需要更新TextView
片段中存在的ViewPager
,根据片段的滑动或单击制表符。假设我点击第一个标签或滑动我的片段,TextView
片段中的OperatorPlanList
更新为“I just click”之类的文本。
注意 - TextView存在于片段的布局中。
当我尝试使用获取视图方法position
中的FragmentStatePageAdapter
来查找位置时,我发现它在看到第一个或最后一个片段时两次更新位置。
那么如何根据ViewPager
???
这是我的FragmentStatePagerAdapter
适配器。
class ViewPagerFinder extends FragmentStatePagerAdapter {
private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();
public ViewPagerFinder(FragmentManager manager) {
super(manager);
}
@Override
public Fragment getItem(int position){
return mFragmentList.get(position);
}
@Override
public int getCount() {
System.out.println("getcount>>>" + mFragmentList.size());
return mFragmentList.size();
}
public void addFragment(Fragment fragment, String title) {
mFragmentList.add(fragment);
mFragmentTitleList.add(title);
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
return super.instantiateItem(container, position);
}
@Override
public void setPrimaryItem(ViewGroup container, int position, Object object) {
super.setPrimaryItem(container, position, object);
}
@Override
public CharSequence getPageTitle(int position) {
return mFragmentTitleList.get(position);
}
}
这就是我设置ViewPager
的方式。
private void setupViewPager(ViewPager viewPager) {
adapter = new ViewPagerFinder(getSupportFragmentManager());
for(int i = 0; i<numberOfPlans;i++){
adapter.addFragment(new OperatorPlanList(),"Plan");
//This is how I am setting up my fragments.
viewPager.setAdapter(adapter);
}
}
这就是我设置Tab
的方式。
private void setupTabIcons() {
System.out.println("number of plans ="+numberOfPlans);
for(int i = 0; i<numberOfPlans;i++){
HashMap<String,String> map = applist.get(i);
String planName = map.get("plan_name");
TextView tabOne = (TextView) LayoutInflater.from(this).inflate(R.layout.custom_tab, null);
tabOne.setText(planName);
tabLayout.getTabAt(i).setCustomView(tabOne);
}
}
这就是我调用方法的方法。
viewPager = (ViewPager)findViewById(R.id.viewpager);
setupViewPager(viewPager);
tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.setupWithViewPager(viewPager);
setupTabIcons();
答案 0 :(得分:1)
创建一个所有选项卡片段将实现的接口
public interface TabFragment {
void onTabSwiped(int position);
}
在托管ViewPager的类中,它实现inline* level
在ViewPagerFinder中,在instantiateItem()期间保留一个TabFragment列表(创建片段并将其转换为新界面,然后调用super)。
现在在实现OnPageChangeListener的类中,在所有TabFragments上调用onTabSwiped方法,该方法在覆盖方法onPageSelected(int position)内的位置传递。
现在,您将在滑动过程中收到每个片段的回调信息,这样您就可以检查其是否正确,并执行正确页面时需要执行的操作。
有一些方法可以提高效率,但这只是让它运转起来的快捷方式。这一切都很相似
- 你也可以在onPageSelected(int position)中从你的适配器中的列表中获取片段,然后调用接口方法。
@Override
public void onPageSelected(int position){
pagerAdapter.mFragmentList.get(position).onTabSwiped();
}