如何在fragment中获取ViewPager选中的页面索引
How to get the selected page index of ViewPager in fragment
我正在使用 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 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;
}
这是我的 activity,其中将包含我的片段:
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
:
public class BaseFragment extends Fragment implements OnItemClickListener {
private final static String TAG = "BaseFragment";
private int tabPosition;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_base, container,
false);
return view;
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onActivityCreated(savedInstanceState);
tabPosition = ((MyActivity) getActivity()).getTabPosition();
Toast.makeText(getActivity(), "page " + tabPosition, Toast.LENGTH_SHORT)
.show();
}
现在,这是我的问题:
activity 的 onPageSelected
中的 toast 在选择或滑动到新页面时始终显示正确的页面。
但是,当您滑动到第 1 页或第 2 页时,我片段中的 toast 只会显示正确的页面。它只会在应用程序启动时才会显示第 0 页。之后,当用户滑动到第 0 页或第 4 页时,根本不会显示任何 toast,甚至连一个空的 toast 都没有。
我编写了 getTabPosition()
和 setTabPosition()
方法,目的是获取片段中当前选定的选项卡位置,但它显然无法正常工作,因此我没有在第 0 页上祝酒词和 4.
我的问题是:如何在 BaseFragment
中获取选定的页面位置,因为我需要该位置来加载适当的数据?
希望我说得足够清楚?
pager.getCurrentItem();
它return当前片段索引
每个片段将显示一组不同的数据,那么每个片段都有一个片段可能是个好主意。这是我在 FragmentPagerAdapter:
中为不同数据显示不同片段所做的工作
@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;
}
这可能不是最好的方法,但在您的 activity 中引用 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;
}
});
}
然后你总是可以像这样在你的 Fragment 中静态访问这个变量 TabbedViewActivity.tabIndex
我正在使用 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 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;
}
这是我的 activity,其中将包含我的片段:
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
:
public class BaseFragment extends Fragment implements OnItemClickListener {
private final static String TAG = "BaseFragment";
private int tabPosition;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_base, container,
false);
return view;
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onActivityCreated(savedInstanceState);
tabPosition = ((MyActivity) getActivity()).getTabPosition();
Toast.makeText(getActivity(), "page " + tabPosition, Toast.LENGTH_SHORT)
.show();
}
现在,这是我的问题:
activity 的 onPageSelected
中的 toast 在选择或滑动到新页面时始终显示正确的页面。
但是,当您滑动到第 1 页或第 2 页时,我片段中的 toast 只会显示正确的页面。它只会在应用程序启动时才会显示第 0 页。之后,当用户滑动到第 0 页或第 4 页时,根本不会显示任何 toast,甚至连一个空的 toast 都没有。
我编写了 getTabPosition()
和 setTabPosition()
方法,目的是获取片段中当前选定的选项卡位置,但它显然无法正常工作,因此我没有在第 0 页上祝酒词和 4.
我的问题是:如何在 BaseFragment
中获取选定的页面位置,因为我需要该位置来加载适当的数据?
希望我说得足够清楚?
pager.getCurrentItem();
它return当前片段索引
每个片段将显示一组不同的数据,那么每个片段都有一个片段可能是个好主意。这是我在 FragmentPagerAdapter:
中为不同数据显示不同片段所做的工作@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;
}
这可能不是最好的方法,但在您的 activity 中引用 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;
}
});
}
然后你总是可以像这样在你的 Fragment 中静态访问这个变量 TabbedViewActivity.tabIndex