優れたライブラリを使おうとしています Sliding Men by JeremyFeinstein。
私の場合、次のようにスライディングメニューを開いた状態でアクティビティを開始すると便利です。
スライドメニューの代わりに
アクティビティにtoggle()
を入れようとしましたが、役に立ちませんでした。
SlidingSherlockFragmentActivity
FragmentActivityの代わりにSherlockFragmentActivityを拡張することを除いて、 SlidingFragmentActivity と同じです。
BaseActivity
_public class BaseActivity extends SlidingSherlockFragmentActivity {
private int mTitleRes;
protected ListFragment mFrag;
public BaseActivity(int titleRes) {
mTitleRes = titleRes;
}
private static final String TAG = "BaseActivity";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTitle(mTitleRes);
// set the Behind View
setBehindContentView(R.layout.menu_frame);
FragmentTransaction t = this.getSupportFragmentManager().beginTransaction();
mFrag = new SampleListFragment();
t.replace(R.id.menu_frame, mFrag);
t.commit();
// customize the SlidingMenu
SlidingMenu sm = getSlidingMenu();
sm.setShadowWidthRes(R.dimen.shadow_width);
sm.setShadowDrawable(R.drawable.shadow);
sm.setBehindOffsetRes(R.dimen.slidingmenu_offset);
sm.setFadeDegree(0.35f);
sm.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
sm.setOnOpenListener(new SlidingMenu.OnOpenListener() {
@Override
public void onOpen() {
Log.d(TAG, "onOpen");
}
});
sm.setOnOpenedListener(new SlidingMenu.OnOpenedListener() {
@Override
public void onOpened() {
Log.d(TAG, "onOpened");
}
});
sm.setOnCloseListener(new SlidingMenu.OnCloseListener() {
@Override
public void onClose() {
Log.d(TAG, "onClose");
}
});
sm.setOnClosedListener(new SlidingMenu.OnClosedListener() {
@Override
public void onClosed() {
Log.d(TAG, "onClosed");
}
});
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case Android.R.id.home:
toggle();
return true;
}
return super.onOptionsItemSelected(item);
}
_
}
FlipperCheck
_public class FlipperCheck extends BaseActivity {
private ViewFlipper flipper;
private TextView secondaryText;
public FlipperCheck() {
super(R.string.app_name);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setSlidingActionBarEnabled(true);
setContentView(R.layout.main);
flipper = (ViewFlipper) findViewById(R.id.voicerecorder_textflipper);
flipper.startFlipping();
flipper.setInAnimation(AnimationUtils
.loadAnimation(getApplicationContext(), Android.R.anim.fade_in));
flipper.setOutAnimation(AnimationUtils
.loadAnimation(getApplicationContext(), Android.R.anim.fade_out));
secondaryText = (TextView) findViewById(R.id.voicerecorder_secondarytext);
secondaryText.setText("Why cannot I see u...");
final TextView firstText = (TextView) findViewById(R.id.firsttext);
final TextView secondText = (TextView) findViewById(R.id.secondtext);
Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
stopFlipper();
flipper.setVisibility(View.INVISIBLE);
secondaryText.setVisibility(View.VISIBLE);
}
});
Button secondButton = (Button) findViewById(R.id.second_button);
secondButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
firstText.setText("Replaying");
secondText.setText("Replaying");
}
});
}
@Override
protected void onStart() {
super.onStart();
toggle();
}
private void stopFlipper() {
flipper.getInAnimation().setAnimationListener(new Animation.AnimationListener() {
public void onAnimationStart(Animation animation) {
}
public void onAnimationRepeat(Animation animation) {
}
public void onAnimationEnd(Animation animation) {
int displayedChild = flipper.getDisplayedChild();
int childCount = flipper.getChildCount();
if (displayedChild == childCount - 1) {
flipper.stopFlipping();
}
}
});
}
}
_
[編集2]
toggle()
のonStart()
は、アクティビティが表示される前にスライディングメニューを開いたり閉じたりするアクティブ化のように見えます。
_01-01 19:27:53.780: D/BaseActivity(351): onOpen
01-01 19:27:53.780: D/BaseActivity(351): onOpened
01-01 19:27:53.780: D/BaseActivity(351): onClose
01-01 19:27:53.790: D/BaseActivity(351): onClosed
01-01 19:27:54.241: D/dalvikvm(351): GC_EXTERNAL_ALLOC freed 2725 objects / 223104 bytes in 80ms
01-01 19:27:54.370: D/dalvikvm(351): GC_EXTERNAL_ALLOC freed 290 objects / 12352 bytes in 75ms
01-01 19:27:54.520: I/ActivityManager(59): Displayed activity com.abc.FlipperCheck/.FlipperCheck: 3084 ms (total 3084 ms)
_
私の質問
Androidライブラリの「スライディングメニュー」を使用しているときに、スライディングメニューを開いた状態でアクティビティを起動するにはどうすればよいですか?
次を使用できます。
@Override
public void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
toggle();
}
}, 1000);
}
Handler
クラスのいずれかから継承する場合は、自分でSlidingActivity
に投稿せずにこれを行うためのより良い方法があります。
@Override
public void onPostCreate(Bundle savedInstanceState) {
if (savedInstanceState == null) {
savedInstanceState = new Bundle();
savedInstanceState.putBoolean("SlidingActivityHelper.open", true);
}
super.onPostCreate(savedInstanceState);
}
これが機能するのは、SlidingActivityHelper
が保存されたインスタンスの状態からメニューのオープン/クローズ状態を復元するためです。保存された状態がない場合は、自分でデフォルト状態として設定しても問題はありません。
getSlidingMenu().post(new Runnable() {
@Override
public void run() {
getSlidingMenu().showMenu();
}
});
それをonCreateに入れると、私にとってはうまくいきました。