我有一个带有 2 个标签(页面)的 viewpager。两个选项卡都包含一个包含多个项目(行)的列表视图。我希望当我在选项卡之间滚动时,两个选项卡中的列表视图要同步(显示相同的行)。
例如,我在第一个选项卡中,当前显示列表视图的第 10-15 行,当我滚动到第二个选项卡时,我想再次在第二个选项卡中显示列表视图的第 10-15 行中的项目。
这可能吗?我在 viewpager 中找不到任何属性来帮助我。如何以编程方式实现此效果?
我有一个带有 2 个标签(页面)的 viewpager。两个选项卡都包含一个包含多个项目(行)的列表视图。我希望当我在选项卡之间滚动时,两个选项卡中的列表视图要同步(显示相同的行)。
例如,我在第一个选项卡中,当前显示列表视图的第 10-15 行,当我滚动到第二个选项卡时,我想再次在第二个选项卡中显示列表视图的第 10-15 行中的项目。
这可能吗?我在 viewpager 中找不到任何属性来帮助我。如何以编程方式实现此效果?
问题解决了。如果其他人需要这种效果,我就是这样做的:
public class myViewPager extends Fragment implements OnPageChangeListener {
...
ViewPager viewPager;
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
...
//init viewPager
...
...
viewPager.setOnPageChangeListener(this);
return view;
}
@Override
public void onPageSelected(int position) {
// get the 2 page(tabs) fragments (I am using FragmentStatePagerAdapter) [*1]
MyFragmentPagerAdapter a = (MyFragmentPagerAdapter) viewPager.getAdapter();
MyFragment selectedFrag = (MyFragment) a.instantiateItem(viewPager, position);
MyFragment previousFrag = (MyFragment) a.instantiateItem(viewPager, (position == 0) ? 1 : 0);
// get 1st visible item position index & item offset value from top [**2]
int index = previousFrag.listView.getFirstVisiblePosition();
View view = previousFrag.listView.getChildAt(0);
int top = (view == null) ? 0 : view.getTop();
//set the listView to the synchronized position
selectedFrag.listView.setSelectionFromTop(index, top);
}
...
private class MyFragmentPagerAdapter extends FragmentStatePagerAdapter {
public MyFragmentPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
Bundle args = new Bundle();
args.putInt("position", position);
return Fragment.instantiate(getActivity(), MyFragment.class.getName(), args);
}
...
...
}
public static class MyFragment extends Fragment {
...
private ListView listView;
...
// CreateView ...
// init listview ...
// do other stuff ...
...
}
}
相关帮助:
[*1] 这里
[**2] 这里
干杯.. :)