canScroll在自定义视图Pager上未被调用



我有一个非常疯狂的问题。

我想通过覆盖 canScroll(View v, boolean checkV, int dx, int x, int y) 方法来防止我的自定义ViewPager滚动。

如果我使用我的ProductsFragment,它的效果很好.即使我在同一ViewPager多次使用它,它也能完美地工作。

现在的问题是,如果我使用另一个片段canScroll将不会在该特定片段上触发。但是我希望在我的应用程序中使用不同的片段:D

查看寻呼机:

public class LockableViewPager extends ViewPager {
public LockableViewPager(Context context, AttributeSet attrs) {
    super(context, attrs);
}

@Override
protected boolean canScroll(View v, boolean checkV, int dx, int x, int y) {
    Log.i("tag","id: "+getContext().getResources().getResourceEntryName(v.getId()));
    return super.canScroll(v, checkV, dx, x, y);
}

适配器:

public class AppointmentPagerAdapter extends FragmentPagerAdapter {
public AppointmentPagerAdapter(FragmentManager fm) {
    super(fm);
}
@Override
public Fragment getItem(int position) {
    switch (position) {
        case 2:
            return new ProductsFragment(); //this works
        case 3:
            return new ProductsFragment(); //this works
        case 1:
            return new InfoFragment(); //this works Not
        case 0:
            return new ScheduleFragment(); //this works Not
        default:
            return null;
    }
}
@Override
public int getCount() {
    return 4;
}
@Override
public CharSequence getPageTitle(int position) {
    return null;
}

产品片段:

public class ProductsFragment extends Fragment {
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View rootView= inflater.inflate(R.layout.fragment_products, container, false);

    ProductsRecycleAdapter adapter=new ProductsRecycleAdapter(getDummyData(), new ProductsRecycleAdapter.ClickHandler() {
        @Override
        public void addToCart(int position) {
            Log.i("log","addToCart: "+position);
        }
        @Override
        public void clicked(int position) {
            Log.i("log","clicked: "+position);
        }
    });
    RecyclerView recyclerView= (RecyclerView) rootView.findViewById(R.id.frag_products_recycle);
    recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
    recyclerView.setItemAnimator(new DefaultItemAnimator());
    recyclerView.setAdapter(adapter);
    return rootView;
}

@Override
public void onAttach(Context context) {
    super.onAttach(context);
}
@Override
public void onDetach() {
    super.onDetach();
}

调度片段:

public class ScheduleFragment extends Fragment {
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View rootView=inflater.inflate(R.layout.fragment_schedule, container, false);

    return rootView;
}

@Override
public void onAttach(Context context) {
    super.onAttach(context);
}
@Override
public void onDetach() {
    super.onDetach();
}

}

例如,LogCat 上的输出应该是:

    tag: id: act_appointment_pager
    tag: id: fragment_products
    tag: id: frag_products_recycle
    tag: id: act_appointment_pager
    tag: id: fragment_products
    tag: id: frag_products_recycle
    tag: id: act_appointment_pager
    tag: id: fragment_products
    tag: id: frag_products_recycle

但是除了ProductsFragment之外,我没有其他片段的输出.

是的,视图有 ID。

这不是很奇怪吗^^

我希望你能为我指出正确的方向。

编辑:我忘记了入口点...

  @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_appointment);
    setupToolbar();
    AppointmentPagerAdapter adapter=new AppointmentPagerAdapter(getSupportFragmentManager());
    LockableViewPager pager= (LockableViewPager) findViewById(R.id.act_appointment_pager);
    pager.setAdapter(adapter);
}

最后我想通了,也许有人想知道怎么做。

设置正确。如果片段没有滚动内容,则不会触发方法canScroll(View v, boolean checkV, int dx, int x, int y)

我添加了一些滚动内容,现在它可以工作了。

但是,如果片段中存在滚动内容和非滚动内容,则该方法仅在滚动内容上触发。

因此,如果您滑动非滚动内容,则似乎会忽略该方法。

此外,还应为布局中的每个视图提供一个 ID。

我认为这里所说的事情没有记录在案,但如果我错了,请纠正我。

最新更新