Cześć,
próbuje zaimplementować wykrywanie tzw. Common Gestures w mojej aplikacji, miejsce wykrywania to Fragment z ViewModelem.
Zaimplementowałem wszystkie niezbędne metody, onDown, onShowPress etc. GestureDetector zostal zainicjalizowany w onCreateView.
Kiedy użytkownik wykona jeden z "powszechnych" gestów, aplikacja powinna wywołać metodę umieszczoną w ViewModelu.
Problem jest z nadpisaniem metody onTouchEvent. Android Studio wysyła błąd, w którym mówi, że moja implementacja nie nadpisuje żadnej metody.
public class SecondFragment extends Fragment implements GestureDetector.OnGestureListener{
private SecondViewModel mViewModel;
private GestureDetectorCompat gDetector;
private final float rate = 3.14f;
public static SecondFragment newInstance() {
return new SecondFragment();
}
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
gDetector = new GestureDetectorCompat(getActivity(), this);
return inflater.inflate(R.layout.second_fragment, container, false);
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
mViewModel = new ViewModelProvider(this).get(SecondViewModel.class);
TextView euroView = getView().findViewById(R.id.inEuro);
TextView valueView = getView().findViewById(R.id.textView);
Switch mSwitch = getView().findViewById(R.id.mySwitch);
mSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
if (isChecked) {
Navigation.findNavController(mSwitch).navigate(R.id.moveToMain);
}
}
});
final Observer<Float> valueObserver = new Observer<Float>() {
@Override
public void onChanged(@Nullable final Float myValue) {
valueView.setText(myValue.toString());
}
};
final Observer<Float> euroValueObserver = new Observer<Float>() {
@Override
public void onChanged(Float myValue) {
euroView.setText(myValue.toString());
}
};
mViewModel.getValue().observe(getViewLifecycleOwner(), valueObserver);
mViewModel.getEuroV().observe(getViewLifecycleOwner(), euroValueObserver);
}
@Override
public void onStart(){
super.onStart();
mViewModel.setValue(SecondFragmentArgs.fromBundle(getArguments()).getVal());
}
@Override
public boolean onDown(MotionEvent motionEvent) {
mViewModel.convertion();
return false;
}
@Override
public void onShowPress(MotionEvent motionEvent) {
}
@Override
public boolean onSingleTapUp(MotionEvent motionEvent) {
mViewModel.convertion();
return false;
}
@Override
public boolean onScroll(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) {
mViewModel.convertion();
return false;
}
@Override
public void onLongPress(MotionEvent motionEvent) {
}
@Override
public boolean onFling(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) {
mViewModel.convertion();
return false;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
this.gDetector.onTouchEvent(event);
return getActivity().onTouchEvent(event);
}