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