私は本当にクレイジーな問題があります。カスタムViewPagerでcanScrollが呼び出されない
私のカスタム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);
}