Android 如何在片段中获取ViewPager的选定页面索引
我正在使用,我的适配器定义如下:Android 如何在片段中获取ViewPager的选定页面索引,android,android-fragments,android-viewpager,viewpagerindicator,Android,Android Fragments,Android Viewpager,Viewpagerindicator,我正在使用,我的适配器定义如下: public class MyPagerAdapter extends FragmentPagerAdapter implements IconPagerAdapter { private final static String TAB_ITEMS[] = { "Tab 1", "Tab 2", "Tab 3", "Tab 4"}; private int count = TAB_ITEMS.length; public MyPagerAdapte
public class MyPagerAdapter extends FragmentPagerAdapter implements
IconPagerAdapter {
private final static String TAB_ITEMS[] = { "Tab 1", "Tab 2", "Tab 3", "Tab 4"};
private int count = TAB_ITEMS.length;
public MyPagerAdapter (FragmentManager fm) {
super(fm);
}
@Override
public int getIconResId(int index) {
// TODO Auto-generated method stub
return 0;
}
@Override
public Fragment getItem(int position) {
Fragment fragment = new BaseFragment();
return fragment;
}
@Override
public int getCount() {
return count;
}
这是我的活动,将包含我的片段:
public class MyActivity extends FragmentActivity implements
OnPageChangeListener {
private int tabPosition;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ViewPager pager = (ViewPager) findViewById(R.id.pager);
MyPagerAdapter adapter = new MyPagerAdapter (
getSupportFragmentManager());
pager.setAdapter(adapter);
UnderlinePageIndicator indicator = (UnderlinePageIndicator) findViewById(R.id.indicator);
indicator.setFades(false);
indicator.setViewPager(pager);
indicator.setOnPageChangeListener(this);
}
@Override
public void onPageScrollStateChanged(int state) {
// TODO Auto-generated method stub
}
@Override
public void onPageScrolled(int position, float positionOffset,
int positionOffsetPixels) {
// TODO Auto-generated method stub
}
@Override
public void onPageSelected(int position) {
// TODO Auto-generated method stub
setTabPosition(position);
Toast.makeText(MyActivity.this,
"Changed to page: " + position, Toast.LENGTH_SHORT).show();
}
public void setTabPosition(int position) {
this.tabPosition = position;
}
public int getTabPosition() {
return this.tabPosition;
}
}
最后,BaseFragment的定义:
现在,这是我的问题:
当选择或滑动到新页面时,活动的onPageSelected中的toast始终显示正确的页面
但是,我的片段中的toast仅在您滑动到第1页或第2页时显示正确的页面。它唯一一次向第0页敬酒是在应用程序启动时。之后,当用户滑动到第0页或第4页时,根本不会显示toast,甚至不会显示空toast
我编写getTabPosition和setTabPosition方法的目的是获取片段中当前选定的制表符位置,但是它显然不能正常工作,因此我在第0页和第4页没有得到祝酒词
我的问题是:如何在BaseFragment中获取所选页面位置,因为我需要该位置来加载适当的数据
希望我说得够清楚
pager.getCurrentItem();
它返回当前的片段索引每个片段将显示一组不同的数据,那么最好为每个片段指定一个片段。下面是我在FragmentPagerAdapter中为不同数据显示不同片段的步骤: 这可能不是最好的方法,但在包含对ViewPager的引用的活动中,请尝试以下方法:
public class TabbedViewActivity extends FragmentActivity {
ViewPager viewPager;
public static int tabIndex = 0;
@Override
protected void onCreate(Bundle bundle) {
......
viewPager = (ViewPager)findViewById(R.id.pager);
TabbedViewActivity.tabIndex = 0; // in the start index is always 0 unless coded otherwise
viewPager.setOnPageChangeListener(
new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
TabbedViewActivity.tabIndex = position;
}
});
}
然后,您可以像在片段TabbedViewActivity.tabIndex中一样静态访问此变量,我尝试用它代替tabPosition=MyActivity getActivity.getTabPosition;,类似于:tabPosition=MyActivity getActivity.pager.getCurrentItem;但同样的结果。滑动到第一页和最后一页不会显示toast。我没有尝试使用构造函数,但我尝试了setArguments,但也不起作用,因为建议使用setArguments而不是非默认构造函数。我还意识到,在getItem中,活动始终实例化片段的2个实例。所以当我尝试你编辑的文章时,我在我的片段中得到了索引0和1。它实际上实例化了前两个,所以滑动是流动的。然后,当导航到第二个选项卡时,它也会预先生成第三个选项卡。因此,下一个也可以很快看到。是的,我明白这一点,那么您建议我如何构造代码,以便获得/了解片段中当前选定的项?这是如果我想保留我的一个片段,我再次编辑。也许ViewPager上的更改侦听器会将位置更新为静态变量,从而让您知道当前索引。
@Override
public Fragment getItem(int index) {
Fragment fragment = null;
// Define the page for each index
switch(index){
case 0:
fragment = new Fragment1();
break;
case 1:
fragment = new Fragment2();
break;
case 2:
fragment = new Fragment3();
break;
}
public class TabbedViewActivity extends FragmentActivity {
ViewPager viewPager;
public static int tabIndex = 0;
@Override
protected void onCreate(Bundle bundle) {
......
viewPager = (ViewPager)findViewById(R.id.pager);
TabbedViewActivity.tabIndex = 0; // in the start index is always 0 unless coded otherwise
viewPager.setOnPageChangeListener(
new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
TabbedViewActivity.tabIndex = position;
}
});
}