2013-05-16 78 views
3

行爲對以下錯誤會發生的2.3設備上,我的設置適用於4.x的設備的罰款。奇怪的錯誤/用ViewPager和動作條(福爾摩斯)

我有一個ViewPager的一些碎片(它們都是同一個班級)。 每個片段都會膨脹它自己的菜單,因爲菜單項可能因片段不同而不同。

爲了測試目的,我在ActionBar中設置了菜單項(ActionBar顯示在圖片的底部,因爲它是一個拆分的ActionBar)。當輕擊項目時,片段中的TextView應設置爲「單擊」。這在一開始就起作用,但是在稍微彈一下之後,會發生這種情況:

當點擊菜單項時,什麼都不會發生。相反,只要我滑動到下一個片段,下一個片段將其TextView設置爲「單擊」。它看起來像ActionBar和它的菜單與下一個片段相關聯。

繼承人PIC

bug

而且繼承人一些代碼:

我的活動:

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

調用supportInvalidateOptionsMenu代替invalidateOptionsMenu – Greensy

回答

4

問題是MotionEvent沒有通過內部類ActionMenuItemView正確處理(實際上,此類中沒有任何特定行爲)。

所以,我不解決最初的問題,但我覺得解決辦法解決方案。我只是覆蓋ActionMenuItemView.dispatchTouchEvent()並使用GestureDetector手動點擊和長按手動。

您可以github檢查此解決方案。

0

我不知道這個確切問題,但翻轉設備時,我有一個問題。該應用程序崩潰。最後,我發現這是Pager類的問題,因爲我像實施SectionsPagerAdapter類一樣實施它們。

我把主類上的公共類放在分離的類上,並且佈局在垂直和水平位置上運行良好。

我不知道這是否可能是問題,但您可以嘗試創建相應的類,而不是將它們留在主類上。無論如何,你傳遞給SegmentPagerAdapter的FragmentManager,所以你不會有任何額外的問題把公共類放在他們各自的文件。

祝你好運!

相關問題