3

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

我有一个 ViewPager,里面有一些片段(它们都是同一个类)。每个片段都会膨胀它自己的菜单,因为菜单项可能因片段而异。

出于测试目的,我在 ActionBar 中设置了一个菜单项(ActionBar 显示在图片底部,因为它是一个拆分的 ActionBar)。当 Item 被点击时,Fragment 中的 TextView 应设置为“clicked”。这在一开始是有效的,但是在轻弹了一下之后,就会发生这种情况:

当点击菜单项时,没有任何反应。相反,只要我滑动到下一个 Fragment,下一个 Fragment 就会将其 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);
    }
}





}

有没有其他人经历过这样的事情,或者对这里可能出现的问题有所了解?

4

2 回答 2

4

问题是MotionEvent内部类没有正确处理ActionMenuItemView(实际上,这个类中没有任何特定行为)。

所以,我没有解决最初的问题,但我找到了解决方法。我只是ActionMenuItemView.dispatchTouchEvent()使用GestureDetector.

您可以在github上查看此解决方案。

于 2013-07-15T07:24:02.633 回答
0

我不知道这个确切的问题,但我在翻转设备时遇到了问题。应用程序崩溃了。最后,我发现这是 Pager 类的问题,因为我在实现它们时就像您实现了 SectionsPagerAdapter 类一样。

我把主课上的公共课放在分开的课上,布局在垂直和水平位置上都很好。

我不知道这是否是问题所在,但您可以尝试创建相应的类,而不是将它们留在主类中。无论如何,您将 FragmentManager 传递给 SectionsPagerAdapter,因此将公共类放在各自的文件中不会有任何额外的问题。

祝你好运!

于 2013-05-16T15:42:45.243 回答