Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用ViewPager和ActionBar(夏洛克)时出现奇怪的错误/行为_Android_Actionbarsherlock - Fatal编程技术网

Android 使用ViewPager和ActionBar(夏洛克)时出现奇怪的错误/行为

Android 使用ViewPager和ActionBar(夏洛克)时出现奇怪的错误/行为,android,actionbarsherlock,Android,Actionbarsherlock,以下错误将发生在2.3设备上,我的设置在4.x设备上运行良好 我有一个ViewPager,里面有一些片段(它们都属于同一类)。 每个碎片都会膨胀它自己的菜单,因为菜单项可能因碎片而异 出于测试目的,我在ActionBar中设置了一个菜单项(ActionBar显示在图片的底部,因为它是一个拆分的ActionBar)。点击项目时,片段中的TextView应设置为“clicked”。这在一开始是有效的,但在稍微翻转后,会发生以下情况: 点击菜单项时,不会发生任何事情。相反,只要我滑动到下一个片段,下一

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

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

出于测试目的,我在ActionBar中设置了一个菜单项(ActionBar显示在图片的底部,因为它是一个拆分的ActionBar)。点击项目时,片段中的TextView应设置为“clicked”。这在一开始是有效的,但在稍微翻转后,会发生以下情况:

点击菜单项时,不会发生任何事情。相反,只要我滑动到下一个片段,下一个片段就会将其文本视图设置为“单击”。似乎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);
    }
}





}
公共类MyFragment扩展了SherlockFragment{
HashSet runningImageTasks=新HashSet();
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图v=充气机。充气(R.layout.fragment\u expose,null);
}
@凌驾
创建选项菜单(菜单菜单,菜单充气机){
充气机。充气(R.menu.menu\U grundstueckexpose,menu);
// ...
}
@凌驾
公共布尔值OnOptions ItemSelected(MenuItem mitem){
开关(mitem.getItemId()){
案例android.R.id.home:
getActivity().finish();
返回true;
案例R.id.myitem:
textView.setText(“单击”);
返回true;
违约:
返回super.onOptionsItemSelected(mitem);
}
}
}

有没有其他人经历过类似的事情,或者对这里可能出现的问题有什么想法?

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

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

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


祝你好运

问题在于内部类
ActionMenuItemView
没有正确处理
MotionEvent
(实际上,该类中没有任何特定行为)

所以,我并没有解决最初的问题,但我找到了解决办法。我只需覆盖
ActionMenuItemView.dispatchTouchEvent()
并使用
GestureDetector
手动处理单击和长时间单击


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

调用SupportInvalidateOptions功能表,而不是InvalidateOptions功能表