我使用加载了片段的ViewPager,我想在viewpager中知道当前显示或选择了哪个片段。
每个片段的 onResume()方法都有一些逻辑,所以当实例化当前所选页面的相邻片段(左和右)时,我会遇到问题。
更新
片段在实际选择后是否会获得回调?
ViewPager适配器代码:
public class LeftPanelPagerAdapter extends FragmentStatePagerAdapter
{
private List<Fragment> fragments;
public LeftPanelPagerAdapter(FragmentManager fm,List<Fragment> fragments)
{
super(fm);
this.fragments = fragments;
}
@Override
public Fragment getItem(int position)
{
return this.fragments.get(position);
}
@Override
public int getCount()
{
return this.fragments.size();
}
@Override
public int getItemPosition(Object object)
{
return POSITION_NONE;
}
@Override
答案 0 :(得分:4)
由于confucius发布的代码,对我来说不起作用。我修改了一下。
问题是不是你的FragmentStatePagerAdapter应该实现OnPageChangeListener,而是Activity本身。你应该为包含你的LeftPanelPagerAdapter的mPager设置一个监听器。
public class ImageDetailActivity extends Activity implements OnPageChangeListener
@Override
public void onCreate(Bundle savedInstanceState)
{
mPager = (ViewPager) findViewById(R.id.pager);
mPager.setAdapter(mAdapter);
mPager.setOnPageChangeListener(this);
....
}
br MikeT
答案 1 :(得分:2)
FragmentPagerAdapter adapter = (FragmentPagerAdapter) mViewPager.getAdapter();
((IFieldServiceFragment) adapter.getItem(mViewPager.getCurrentItem()))
.updateFragment();
您可以从ViewPager获取当前项目的索引,然后从适配器获取该项目(片段)。
答案 2 :(得分:2)
只需使用ViewPager.getCurrentItem()
即可将其返回给您。
答案 3 :(得分:0)
public class LeftPanelPagerAdapter extends FragmentStatePagerAdapter implements OnPageChangeListener{
.....
.....
....
private int currentSelectedFragmentPosition = 0;
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub
}
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub
}
public void onPageSelected(int arg0) {
currentSelectedFragmentPosition = arg0;
}
public int getCurrentSelectedFragmentPosition() {
return currentSelectedFragmentPosition;
}
}
您可以实现OnPageChangeListener
并添加一个成员变量,该变量可用于跟踪当前选定的片段位置。
任何时候你想知道当前选择的片段是做什么的
myAdapter.getCurrentSelectedFragmentPosition();
答案 4 :(得分:0)
以下是我选择片段时如何获得回调
重写FragmentStatePagerAdapter的方法setPrimaryItem,每次选择新片段时都会调用它。 Object参数是你的片段,所以其余的很容易。
mViewPager = (ViewPager) findViewById( R.id.view_pager );
mViewPager.setAdapter( new FragmentStatePagerAdapter(manager) {
@Override
public void setPrimaryItem(ViewGroup container, int position, Object object) {
if (object instanceof UpdateWhenSelected) {
((UpdateWhenSelected) object).update();
}
super.setPrimaryItem(container, position, object);
}
@Override
public Fragment getItem(int position) {
//your code here
return ***;
}
} return getItem( position );
}
@Override
public int getCount() { return ***; }
});
当然,实现了片段的custon接口
public class YourFragment extends Fragment implements UpdateWhenSelected {
...
public void update() {
//code
}
}
答案 5 :(得分:0)
princomp
您可以在适配器https://developer.android.com/reference/android/support/v4/view/ViewPager.html#getCurrentItem中获取片段的当前位置(
要在viewpager更改片段时获取事件,您可以使用ViewPager.getCurrentItem()
ViewPager.OnPageChangeListener