我有一个非常疯狂的问题。
我想阻止我的自定义ViewPager
滚动覆盖canScroll(View v, boolean checkV, int dx, int x, int y)
方法。
如果我使用ProductsFragment
,它的效果非常好。即使我在同一ViewPager
中多次使用它,它也能完美运行。
问题是现在,如果我使用另一个片段canScroll
将不会触发该特定片段。
但我想在我的应用程序中使用不同的片段:D
ViewPager:
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;
}
ProductsFragment:
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();
}
ScheduleFragment:
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);
}
答案 0 :(得分:1)
最后我想出来了,也许有人想知道如何。
设置正确。
如果片段没有滚动内容,则方法canScroll(View v, boolean checkV, int dx, int x, int y)
将不会触发。
我添加了一些滚动内容,现在可以使用了。
但是如果片段中有一个scolling内容和一个非滚动内容,该方法只会触发滚动内容。
因此,如果您在非滚动内容处滑动,则该方法将被忽略。
此外,您应该为布局中的每个视图提供一个ID。
我认为这里所说的内容没有记录,但如果我对此错了,请纠正我。