其他分享
首页 > 其他分享> > android-ViewPager和ActionBar(Sherlock)的奇怪错误/行为

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

作者:互联网

以下错误将在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);
}

@Override
protected 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>();


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);



}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.fragment_expose, null);

}




@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.menu_grundstueckexpose, menu);

    // ...

}

@Override
public 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上检查此解决方案.

标签:actionbarsherlock,android
来源: https://codeday.me/bug/20191030/1971406.html