Android 从片段中的FrameLayout禁用滚动视图

Android 从片段中的FrameLayout禁用滚动视图,android,android-fragments,android-framelayout,Android,Android Fragments,Android Framelayout,我在活动中有一个滚动视图,其中包含一些片段。 其中一个片段包含一个可移动的图像视图,因此我需要阻止scrollview截取平移 我的片段上有一个侦听器来设置一个标志,以防止scrollview进行交互 TourMapFragment片段具有以下内容: @Override public void onAttach(Activity activity) { super.onAttach(activity); try { mListener = (OnFragmentI

我在活动中有一个滚动视图,其中包含一些片段。 其中一个片段包含一个可移动的图像视图,因此我需要阻止scrollview截取平移

我的片段上有一个侦听器来设置一个标志,以防止scrollview进行交互

TourMapFragment片段具有以下内容:

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);
    try {
        mListener = (OnFragmentInteractionListener) activity;
    } catch (ClassCastException e) {
        throw new ClassCastException(activity.toString()
                + " must implement OnFragmentInteractionListener");
    }
}

@Override
public void onDetach() {
    super.onDetach();
    mListener = null;
}

/**
 * This interface must be implemented by activities that contain this
 * fragment to allow an interaction in this fragment to be communicated
 * to the activity and potentially other fragments contained in that
 * activity.
 * <p/>
 * See the Android Training lesson <a href=
 * "http://developer.android.com/training/basics/fragments/communicating.html"
 * >Communicating with Other Fragments</a> for more information.
 */
public interface OnFragmentInteractionListener {
    void selectedTourPoint(int position);
    void setScrollTouchInteraction(boolean enabled);
}

public void setScrollTouchInteraction(boolean enabled){
    mListener.setScrollTouchInteraction(enabled);
}

那么如何获取对“??”处TourMapFragment的引用呢?

为了让布局知道包含它的片段,您可以创建一个简单的setter:

private TourMapFragment mFragment;

public void setFragment(TourMapFragment fragment) {
  mFragment = fragment;
}

@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
  // Default action if the fragment isn't set
  if (mFragment == null) super.onInterceptTouchEvent(ev);

  switch (ev.getAction()) {
    case MotionEvent.ACTION_DOWN:
      mFragment.setScrollTouchInteraction(false);
      break;
    case MotionEvent.ACTION_UP:
      mFragment.setScrollTouchInteraction(true);
      break;
  }
  return false;

  return super.onInterceptTouchEvent(ev);
}
并在视图膨胀后使用它(在片段中):

请记住在布局上设置id:

<TourMapRootLayout
  ...
  android:id="@+id/tour_map_root_layout"
  ...>

private TourMapFragment mFragment;

public void setFragment(TourMapFragment fragment) {
  mFragment = fragment;
}

@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
  // Default action if the fragment isn't set
  if (mFragment == null) super.onInterceptTouchEvent(ev);

  switch (ev.getAction()) {
    case MotionEvent.ACTION_DOWN:
      mFragment.setScrollTouchInteraction(false);
      break;
    case MotionEvent.ACTION_UP:
      mFragment.setScrollTouchInteraction(true);
      break;
  }
  return false;

  return super.onInterceptTouchEvent(ev);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
  super.onViewCreated(view, savedInstanceState);
  TourMapRootLayout layout = (TourMapRootLayout) view.findViewById(R.id.tour_map_root_layout);
  layout.setFragment(this);
}
<TourMapRootLayout
  ...
  android:id="@+id/tour_map_root_layout"
  ...>