Я нашел вопрос ниже: Android: FragmentActivity in FragmentActivity (Scrollview in Navigationbar) . Однако этот вопрос связан с тем, как использовать транзакции для отображения фрагментов, а также для безопасного обнаружения жестов. Примечание. В ответе, который я опубликовал, есть ссылка, в которой также есть эффективный способ отображения фрагментов в контейнере с использованием транзакций, включая два сценария). Пожалуйста, см. Это. Я попробовал несколько вещей, в отношении, но с использованием фрагмента с поддержкой ViewPager, не вложенными:Полоса прокрутки, применяемая на уровне фрагмента вместе с ViewPager, по умолчанию не используется.
Детали: https://moqups.com/[email protected]/lc0ZOERO/p:a5d7b55eb
- по умолчанию Disabled салфетки с помощью onTouchEvent и onInterceptTouchEvent с помощью пользовательского ViewPager.
- Объявленный FragmentStatePagerAdapter со списком фрагментов, каждый из которых отображается на каждой вкладке.
- Объявите фрагменты в main_layout main_activity, у которого есть этот ViewPager вместе. Идея состоит в том, чтобы показать активность_фрагментов при нажатии кнопки на клике ViewPager_fragment и при нажатии пользователем кнопки , то по умолчанию ViewPager_fragment по умолчанию отображается снова, используя транзакции back stack для добавления и выталкивания их на BackPressed активности. Поэтому я также поддерживаю свой собственный backStack, чтобы показать/скрыть действия_фрагменты, когда задний стек выдает транзакцию.
Теперь то, что я хочу достичь, - это сделать третий пункт выше, используя жестовые салфетки для правых (слева направо) пальцев.
Я использовал GestureListener и SimpleOnGestureListener и активность OnTouchEvent для этого.
Проблема, что я лицо, что:
Этот жест работает на части экрана деятельности, которая ниже фрагмента и части деятельности. Я хочу, чтобы жест работал
- На участке фрагмента, который имеет несколько видов в своем расположении.
- В левом-правом направлении.
- Только от Activity_fragment до фрагмента вкладки ViewPager, чтобы вести себя как навигацию по истории, как это уже делалось в onBakPressed/onKeyDown с использованием всплывающих окон back-back и моего пользовательского back-стека.
Я пробовал следующий класс и изменял свой фрагмент активности в макетах, подобных этому.
Мой Жест и сенсорный слушатель расширен макет кадра:
public class OnSwipeTouchListener extends FrameLayout {
private final GestureDetector gestureDetector;
private static final String TAG = "OnSwipeTouchListener";
private Context context;
public OnSwipeTouchListener(Context context, AttributeSet attrs) {
super(context, attrs);
this.context=context;
gestureDetector = new GestureDetector(context, new GestureListener());
setClickable(true);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
return super.onInterceptTouchEvent(ev);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
gestureDetector.onTouchEvent(motionEvent);
return super.onTouchEvent(event);
}
private final class GestureListener extends SimpleOnGestureListener {
private static final int SWIPE_THRESHOLD = 100;
private static final int SWIPE_VELOCITY_THRESHOLD = 100;
@Override
public boolean onDown(MotionEvent e) {
return true;
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
boolean result = false;
try {
float diffY = e2.getY() - e1.getY();
float diffX = e2.getX() - e1.getX();
if (Math.abs(diffX) > Math.abs(diffY)) {
if (Math.abs(diffX) > SWIPE_THRESHOLD && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) {
if (diffX > 0) {
onSwipeRight();
} else {
onSwipeLeft();
}
}
} else {
if (Math.abs(diffY) > SWIPE_THRESHOLD && Math.abs(velocityY) > SWIPE_VELOCITY_THRESHOLD) {
if (diffY > 0) {
onSwipeBottom();
} else {
onSwipeTop();
}
}
}
} catch (Exception exception) {
//see that e1 is null
}
return result;
}
}
public void onSwipeRight() {
///manage my back stack history here.
}
public void onSwipeLeft() {
}
public void onSwipeTop() {
}
public void onSwipeBottom() {
}
}
, а затем изменить макеты кадров в этом классе справки:
<path.to.my.package.OnSwipeTouchListener
android:id="@+id/activity_frag_frame_layout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:visibility="invisible" >
<fragment
android:id="@+id/activity_frag1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
class="path.to.my.package.fragments.Activity_Frag1"
android:tag="act_frag1" />
</path.to.my.package.OnSwipeTouchListener>
Это немного помогло мне, поэтому она должна помочь вам в поиске решение. В одном из фрагментов, которые перестали работать, есть searchView, и щелчок не работает. Если вы понимаете, чего я хочу достичь, пожалуйста, помогите в этом отношении.
Обновление 1: Возвращение true как в onTouchEvent, так и onInterceptTouchEvent имеет желаемый эффект, но блокирует щелчки фрагментами, в которых находится SearchView, в доступных кликах нет кликов. Работает только салфетка. Обновление: в моем последнем: я также полностью отказался от использования транзакционных обратных стеков, потому что я полагаюсь на свой пользовательский back-stack, где я поддерживаю историю навигации для всех вкладок. Это я использую с помощью методов setCurrentTab и onTabSelected, заданных ViewPager и FragmentStatePagerAdapter.
Update 2: Это один трудно осуществить: Проверьте, какие нужны события, которые будут перехвачены и которые должны быть переданы на мнения детей: http://developer.android.com/training/gestures/viewgroup.html
Update 3:
В мой макет для активности, есть пейджер представления, а в каждом макете фрейма ниже него есть один фрагмент.
При запуске приложения viewPager показывает фрагмент на первой вкладке.
Когда нажата кнопка на этом фрагменте, отображается один из фрагментов в рамке ниже viewpager и добавляется в пользовательскую заднюю часть.
При нажатии клавиши возврата этот фрагмент снова скрывается, чтобы показать фрагмент вкладки в viewPager. Все вышеизложенное сделано. Только я хочу, чтобы жестом ладоней был слева направо на работу, и я обнаружил, что могу это сделать, перехватывая события касания. Но это совсем не так. Когда я возвращаю true, работает только с жестом салфетки, другое мудрый это действие отменено и щелчки на этом фрагменте работы.
Вопрос не ясен. –
@AliImran Разъяснение: что делать, если вы хотите больше фрагментов, кроме фрагментов вкладки (которые вы показываете на вкладках), потому что, когда вы нажимаете на кнопку на этом фрагменте, вы хотите показать другой фрагмент, а не новый вид деятельности, потому что вы хотите, чтобы вкладки и панель действий отображались и заставляли пользователя чувствовать, что этот новый фрагмент был открыт на той же вкладке, где он будет занимать то же место, что и фрагмент табуляции. Вот что я пытался сделать. Но теперь я хочу использовать салфетки, как описано выше. –
Я думаю, что вы хотите это: -https: //github.com/astuetz/ViewPagerExtensions –