Я хочу создать горизонтальный прокручиваемый ViewPager. My ViewPager содержит фрагменты. Каждая ширина фрагмента больше экрана, поэтому прокрутка должна быть включена.Горизонтальный прокручиваемый ViewPager
Я использую следующий макет для моего элемента фрагмента:
<HorizontalScrollView
android:id="@+id/view_horizontal_scroll"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:isScrollContainer="true" >
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:orientation="horizontal" >
<View
android:layout_width="100dp"
android:layout_height="fill_parent"
android:background="#AABBCC" />
<View
android:id="@+id/test"
android:layout_width="1500dp"
android:layout_height="fill_parent" />
<View
android:layout_width="100dp"
android:layout_height="fill_parent"
android:background="#ccBBaa" />
</LinearLayout>
</HorizontalScrollView>
Я также создал пользовательский ViewPager, которая позволяет горизонтальную прокрутку:
public class ScrollableViewPager extends ViewPager {
private GestureDetector mGestureDetector;
public ScrollableViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
mGestureDetector = new GestureDetector(getContext(),
new YScrollDetector());
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
// Tell our parent to stop intercepting our events!
getParent().requestDisallowInterceptTouchEvent(true);
return super.onInterceptTouchEvent(ev)
&& mGestureDetector.onTouchEvent(ev);
}
}
YScrollDetector только перезаписывает onScrollMethod. Все идет нормально. Горизонтальная прокрутка отлично работает.
Но теперь у меня есть проблема:
Допустим, у меня есть ViewPager с 5 фрагментов ([0], [1], [2], [3], [4]) в ней и хотите начать с пункта [2]. Когда я siwpe назад Я хочу, чтобы положение прокрутки предыдущего пункта [1] находится на праве максимума, а не 0.
My Framgents выглядеть следующим образом:
public class AbstractFragment extends Fragment {
private static final String _ID = "ID";
private int _id;
private ScrollableViewPager mPager;
public AbstractFragment() {
}
public AbstractFragment(int id, int colorId) {
this._id = id;
}
@Override
public void onCreate(Bundle savedInstanceState) {
Log.d(getClass().getSimpleName(), "[" + _id + "]: onCreate");
super.onCreate(savedInstanceState);
if (savedInstanceState != null) {
_id = savedInstanceState.getInt(_ID);
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View fragmentView = inflater.inflate(R.layout.fragment_menu_container,
container, false);
setUpScrollView(fragmentView);
return fragmentView;
}
@Override
public void onResume() {
Log.d(getClass().getSimpleName(), "[" + _id + "]: onResume");
setUpScrollView(getView());
super.onResume();
}
private void setUpScrollView(View fragmentView) {
if (fragmentView == null) {
return;
}
HorizontalScrollView scrollView = (HorizontalScrollView) fragmentView
.findViewById(R.id.view_horizontal_scroll);
if (scrollView != null) {
int currentItem = getCurrentPagerItem();
if (_id < currentItem) {
// previous Item : X Scroll: width of content
View content = scrollView.getChildAt(0);
int width = content.getRight();
width = width - scrollView.getRight();
scrollView.scrollTo(width, 0);
Log.d(getClass().getSimpleName(), "[" + _id + "] width: "
+ width);
// scrollView.fullScroll(View.FOCUS_RIGHT);
} else if (_id > currentItem) {
// next Item - X Scroll: 0
scrollView.fullScroll(View.FOCUS_LEFT);
} else {
// current Item - Nothing to do her
}
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
if (outState == null) {
return;
}
outState.putInt(_ID, _id);
}
private ScrollableViewPager getPager() {
PagerActivity activity = (PagerActivity) getActivity();
return activity.getViewPager();
}
private int getCurrentPagerItem() {
if (mPager == null) {
mPager = getPager();
}
return mPager.getCurrentItem();
}
}
В моих фрагментах я хочу установить положение прокрутки предыдущего фрагмента. Но это не работает, потому что ширина ScrollView и ContentView равны 0.
Кто-нибудь знает ответ? Спасибо !!!
_id является необъявленная, пожалуйста скажите мне, что значения идентификаторов; –