2.3设备上会出现以下错误,我的设置在4.x设备上运行正常。
我有一个ViewPager,里面有一些片段(它们都是同一个类)。 每个片段都会膨胀它自己的菜单,因为菜单项可能会从片段到片段不等。
出于测试目的,我在ActionBar中设置了一个菜单项(ActionBar显示在pic的底部,因为它是一个拆分的ActionBar)。轻触项目时,片段中的TextView应设置为“单击”。这在一开始就有效,但在稍微晃了一下之后,会发生这种情况:
点击菜单项时,没有任何反应。相反,只要我滑动到下一个片段,下一个片段就会将其TextView设置为“单击”。似乎ActionBar和它的菜单与下一个片段相关联。
这是一张照片
还有一些代码:
我的活动:
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);
}
}
}
还有其他人经历过这样的事情,或者对这里可能存在的问题有所了解吗?
答案 0 :(得分:4)
问题是内部类MotionEvent
无法正确处理ActionMenuItemView
(实际上,此类中没有任何特定行为)。
所以,我没有解决初始问题,但我找到了解决方法。我只是覆盖ActionMenuItemView.dispatchTouchEvent()
并使用GestureDetector
手动点击和长按。
您可以在github上查看此解决方案。
答案 1 :(得分:0)
我不知道这个确切的问题,但在翻转设备时遇到了问题。该应用程序崩溃了。最后,我发现这是Pager类的问题,因为我实现它们就像你已经实现了SectionsPagerAdapter类一样。
我把主类上的公共类放在分离的类上,布局在垂直和水平位置都很好。
我不知道这是否可能是问题,但您可以尝试创建相应的类,而不是将它们留在主类上。无论如何,你传递给SectionsPagerAdapter FragmentManager,所以你不会有任何额外的问题将公共类放在他们各自的文件中。
祝你好运!