I am trying to use excellent library Sliding Menu by Jeremy Feinstein.
For my case it will be great if the activity is launched with Sliding Menu open like
instead of Sliding menu closed like
I have tried to put toggle()
in the activity but no use.
SlidingSherlockFragmentActivity
It is same as SlidingFragmentActivity except it extends SherlockFragmentActivity instead of FragmentActivity.
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();
}
}
});
}
}
[Edit 2]
Look like toggle()
in onStart()
is activation both opening and closing of Sliding Menu before activity is displayed.
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)
My Question
While using Android Library "Sliding Menu" how to launch an activity with Sliding Menu open?
You can use:
@Override
public void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
toggle();
}
}, 1000);
}
There's a better way to do this without posting to the Handler
yourself, if you inherit from one of the SlidingActivity
classes:
@Override
public void onPostCreate(Bundle savedInstanceState) {
if (savedInstanceState == null) {
savedInstanceState = new Bundle();
savedInstanceState.putBoolean("SlidingActivityHelper.open", true);
}
super.onPostCreate(savedInstanceState);
}
This works because SlidingActivityHelper
restores the menu open/closed state from the saved instance state. If there's no saved state then there's no harm in setting it yourself as a default state.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With