홈>
Fragment에서 작동하는 제스처를 위로 스 와이프하려고합니다. 활동과 마찬가지로 잘 작동합니다. 조각에서 dispatchTouchEvent에 문제가 있습니다. Fragment에서 dispatchTouchEvent를 어떻게 사용합니까? 이것을 달성하는 동등한 방법이 있습니까?
@Override
public boolean dispatchTouchEvent(MotionEvent me)
{
this.detector.onTouchEvent(me);
return super.dispatchTouchEvent(me);
}
- 답변 # 1
- 답변 # 2
활동을 바꾸지 않고 조각이 활동에 첨부됩니다. 따라서 여전히 조각 부모 활동에서 dispatchTouchEvent를 재정의하고 거기에서 모든 조치를 전달할 수 있습니다.
예 :
@Override public boolean dispatchTouchEvent(MotionEvent ev) { MyFragment myFragment = (MyFragment) getFragmentManager().findFragmentByTag("MY_FRAGMENT_TAG"); myFragment.doSomething(); return super.dispatchTouchEvent(ev); }
- 답변 # 3
이러한 부모 활동에서 TouchEvent를 전달해야합니다. 이 활동을 부모 활동에 추가하십시오 :
private List<MyOnTouchListener> onTouchListeners; @Override protected void onCreate(Bundle savedInstanceState) { if(onTouchListeners==null) { onTouchListeners=new ArrayList<>(); } } public void registerMyOnTouchListener(MyOnTouchListener listener){ onTouchListeners.add(listener); } @Override public boolean dispatchTouchEvent(MotionEvent ev) { for(MyOnTouchListener listener:onTouchListeners) listener.onTouch(ev); return super.dispatchTouchEvent(ev); } public interface MyOnTouchListener { public void onTouch(MotionEvent ev); }
OnSwipeTouchListener :
public class OnSwipeTouchListener{ private final GestureDetector gestureDetector; public OnSwipeTouchListener (Context ctx){ gestureDetector = new GestureDetector(ctx, new GestureListener()); } private final class GestureListener extends SimpleOnGestureListener { //override touch methode like ondown ... //and call the impelinfragment() } public void impelinfragment(){ //this method impelment in fragment } //by calling this mehod pass touch to detector public void onTouch( MotionEvent event) { gestureDetector.onTouchEvent(event); }
터치하기를 원하는 조각에이 코드를 추가하십시오 :
//ontouch listenr MainActivity.MyOnTouchListener onTouchListener; private OnSwipeTouchListener touchListener=new OnSwipeTouchListener(getActivity()) { public void impelinfragment(){ //do what you want:D } }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //setting for on touch listener ((MainActivity)getActivity()).registerMyOnTouchListener(new MainActivity.MyOnTouchListener() { @Override public void onTouch(MotionEvent ev) { LocalUtil.showToast("i got it "); touchListener.onTouch(ev); } }); }
이 방법을 사용하여 rax 답변과 달리 페이지의 다른 요소와 충돌하지 않고 조각으로 오른쪽 또는 왼쪽으로 모든 스 와이프 이벤트를 가져옵니다.
관련 자료
- Android에서 조각에 대한 NavController를 검색 할 수 없습니까?
- Android View Binding - android보기 바인딩 - 조각 수명주기의 명확한 바인딩
- kotlin - Android Fragment에서 SnackBar를 만드는 방법은 무엇입니까?
- UI controls not showing on fragment - 조각에 UI 컨트롤이 표시되지 않음-Android
- kotlin - Android 탐색은 조각 생성자에 인수를 전달합니다
- 조각의 목록을 Android의 사용자 지정 뷰 클래스로 보내는 방법은 무엇입니까?
- 방금 새 조각을 추가했지만 Android 스튜디오에서 회색으로 표시됩니까?
- java - Android 조각의 맵 박스 SDK
- 안드로이드에서 조각에서 활동으로 데이터를 보내는 방법
- java - android studio의 조각에서 대화 상자를 어떻게 열 수 있습니까?
- 안드로이드 kotlin에서 조각으로 컨텍스트를 초기화하는 방법
- 프래그먼트 및 하단 네비게이션 바가있는 Android FloatingActionButton
- Android nested fragments - android 중첩 조각 - 내부 단편에서 역 압축 된 후 외부 단편이 응답하지 않음
- java - 수직 방향으로 오는 Android TV Fragment (주요 단편)?
- 백그라운드에서 조각을 다시 가져올 때 Android 조각 수명주기
- kotlin의 Android에서 대화 상자 조각에서 onCancel을 재정의하는 방법은 무엇입니까?
관련 질문
- android : onSaveInstanceState () 활동 후 열려있는 모든 조각을 죽이는 방법
- android : 뒤로 누른 후 선택한 탐색 창 상태 업데이트
- 하단 탐색 모음을 사용하여 Android의 마지막 조각으로 돌아가는 방법
- java : Recyclerview는 Android에서 채팅 화면의 다음 왼쪽보기로 이동하지 않고 같은쪽에 목록을 표시합니다.
- Android 탐색 java.language.IllegalStateException 조각 클래스가 설정되지 않았습니다.
- android : 다른 뷰 가시성이 xml에서 "사라진"상태 일 때 뷰를 중앙에 정렬하는 방법
- Android Fragment에 onBackPressed를 구현하는 방법은 무엇입니까?
- android : 테마 PreferenceFragmentCompat
- android : BottomNavigationBar에서 작동하지 않는 다른 언어의 문자열 리소스
- android : 다른 조각에서 도구 모음을 처리하는 데 이상한 문제
스 와이프를 감지/처리하는 것이 목표라면,보기를 만든 후 조각의보기에 터치 이벤트 리스너를 추가하십시오.