android-ViewPager和ActionBar(Sherlock)的奇怪错误行为

android-ViewPager和ActionBar(Sherlock)的奇怪错误行为,第1张

概述以下错误将在2.3设备上发生,我的设置在4.x设备上运行正常.我有一个ViewPager,其中包含一些片段(它们都是同一类).每个片段都会增加其自己的菜单,因为菜单项可能因片段而异.为了进行测试,我在ActionBar中设置了一个菜单项(该ActionBar显示在图片的底部,因为它是一个拆分的ActionB

以下错误将在2.3设备上发生,我的设置在4.x设备上运行正常.

我有一个VIEwPager,其中包含一些片段(它们都是同一类).
每个片段都会增加其自己的菜单,因为菜单项可能因片段而异.

为了进行测试,我在Actionbar中设置了一个菜单项(该Actionbar显示在图片的底部,因为它是一个拆分的Actionbar).轻按Item时,应将“片段”中的TextVIEw设置为“单击”.这从一开始就起作用,但是稍微滑动一下,就会发生:

当菜单项被点击时,什么也没有发生.相反,只要我轻扫到下一个片段,下一个片段就会将其TextVIEw设置为“单击”.似乎Actionbar及其菜单与下一个Fragment相关联.

继承人的照片

这是一些代码:

我的活动:

public class MyActivity extends SherlockFragmentActivity implements    MyFragment.InvalIDateListener {VIEwPager vIEwPager;SectionsPagerAdapter pagerAdapter;public voID invalIDate() {    ActivityCompat.invalIDateOptionsMenu(act);}@OverrIDeprotected voID onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentVIEw(R.layout.empty_vIEwpager);    getSupportActionbar().setHomebuttonEnabled(true);    getSupportActionbar().setdisplayHomeAsUpEnabled(true);    pagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());    vIEwPager = (VIEwPager) findVIEwByID(R.ID.pager);    vIEwPager.setAdapter(pagerAdapter);    vIEwPager.setCurrentItem(initialindex);}public class SectionsPagerAdapter extends FragmentPagerAdapter {    public SectionsPagerAdapter(FragmentManager fm) {        super(fm);    }    @OverrIDe    public Fragment getItem(int position) {        Fragment fragment = new MyFragment();        fragment.setHasOptionsMenu(true);        return fragment;    }    // ...}

我的片段:

public class MyFragment extends SherlockFragment {HashSet<ImageVIEw> runningImageTasks = new HashSet<ImageVIEw>();@OverrIDepublic voID onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);}@OverrIDepublic VIEw onCreateVIEw(LayoutInflater inflater, VIEwGroup container,        Bundle savedInstanceState) {    VIEw v = inflater.inflate(R.layout.fragment_expose, null);}@OverrIDepublic voID onCreateOptionsMenu(Menu menu, MenuInflater inflater) {    inflater.inflate(R.menu.menu_grundstueckexpose, menu);    // ...}@OverrIDepublic boolean onoptionsItemSelected(MenuItem mitem) {    switch (mitem.getItemID()) {    case androID.R.ID.home:        getActivity().finish();        return true;    case R.ID.myitem:        textVIEw.setText("clicked");         return true;    default:        return super.onoptionsItemSelected(mitem);    }}}

是否有其他人经历过类似的事情,或者对这里可能存在的问题有想法?

解决方法:

问题在于,内部类ActionMenuItemVIEw无法正确处理MotionEvent(实际上,此类中没有任何特定行为).

因此,我没有解决最初的问题,但是找到了解决方法.我只是重写ActionMenuItemVIEw.dispatchtouchEvent()并使用GestureDetector手动处理单击和长按.

您可以在github上检查此解决方案.

总结

以上是内存溢出为你收集整理的android-ViewPager和ActionBar(Sherlock)的奇怪错误/行为全部内容,希望文章能够帮你解决android-ViewPager和ActionBar(Sherlock)的奇怪错误/行为所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1086809.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-27
下一篇2022-05-27

发表评论

登录后才能评论

评论列表(0条)

    保存