ICSを実行しているSamsungGalaxyS2でスライドメニューが正常に機能するのと同じ問題が発生しましたが、Gingerbreadを実行しているHTCDesireでは問題が発生しませんでした。
スライドメニューを実装するためにあなたと同じ方法を使用しましたが、別の実装で問題が解決したことがわかりました。
メニューをアクティビティに手動で添付する代わりに:
mSlidingMenu.attachToActivity(this,SlidingMenu.SLIDING_CONTENT);
SlidingMenuライブラリのSlidingアクティビティの1つによってアクティビティを拡張することを選択しました。私の場合、FragmentActivity
最初はアクティビティが拡張されていましたが、代わりにSlidingFragmentActivity
次に、メソッド内にbehindViewを設定する必要があります。そうしonCreate
ないと、アクティビティがクラッシュします。
setBehindContentView(R.layout.slidingmenu); //Replace with the layout of your menu
問題が解決するはずです。
これが私のアクティビティのサンプルコードです:
public class MainActivity extends SlidingFragmentActivity {
SlidingMenu menu;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Main view layout for the activity
setContentView(R.layout.activity_listing);
// set the Behind View : REQUIRED (replace with your menu's layout)
setBehindContentView(R.layout.slidingmenu);
menu = getSlidingMenu();
//Now you can customize your sliding menu if you want
menu.setMode(SlidingMenu.LEFT);
menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN);
menu.setShadowWidthRes(R.dimen.shadow_width);
menu.setShadowDrawable(R.drawable.slidingmenu_shadow);
menu.setBehindOffsetRes(R.dimen.slidingmenu_offset);
menu.setFadeDegree(0.35f);
このソリューションでは、電話をかける必要がないことに気付くでしょう。
mSlidingMenu.setMenu(firstPage);
mSlidingMenu.attachToActivity(this,SlidingMenu.SLIDING_CONTENT);
SlidingMenuライブラリのすべてのソースコードを分析したわけではありませんが、現在のattachToActivity
メソッドにバグがある場合があり、ライブラリが提供する特別なアクティビティを使用すると、それらのバグは表示されません。
編集: SlidingMenuライブラリとActionBarSherlock(ABS)を使用している人はOKです。まず、ABSがSlidingMenuライブラリで参照されていることを確認する必要があります。そうすることで、SlidingMenuが提供するアクティビティクラスをABSクラスで拡張できるようになります。
ABSとスライディングメニューの両方でFragmentActivityを使用する場合の例:スライディングメニューライブラリで変更する必要があります
class SlidingFragmentActivity extends FragmentActivity implements SlidingActivityBase
に
class SlidingFragmentActivity extends SherlockFragmentActivity implements SlidingActivityBase
そして、アプリケーションでは、SlidingFragmentActivity
通常どおりに使用します。
これが私のアプリのコードです。これは私が投稿したものと似ていますが、ABSをサポートしています:
public class MainActivity extends SlidingFragmentActivity {
ActionBar mActionBar;
SlidingMenu menu;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_listing); //Layout of the above view
/*
* ABS initialization
*/
mActionBar = getSupportActionBar();
mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
mActionBar.setDisplayHomeAsUpEnabled(true);
/*
* Sliding menu initialization
*/
menu = getSlidingMenu();
menu.setMode(SlidingMenu.LEFT);
menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN);
menu.setShadowWidthRes(R.dimen.shadow_width);
menu.setShadowDrawable(R.drawable.slidingmenu_shadow);
menu.setBehindOffsetRes(R.dimen.slidingmenu_offset);
menu.setFadeDegree(0.35f);
/* This line initializes the way the sliding menu is working
if you set the boolean to true, the ActionBar will slide along with the content.
if you set to false, only the content will slide and the ActionBar will not move */
setSlidingActionBarEnabled(true);
// set the Behind View
setBehindContentView(R.layout.slidingmenu); //Menu view