Ok so yours work, and I see the change that causes my version to lose
its history:
// Yours - works:
private OnClickListener gotoBClickListener = new
GotoBClickListener();
public void onCreate(Bundle savedInstanceState) {
button.setOnClickListener(gotoBClickListener);
}
// Mine - does not work:
public void onCreate(Bundle savedInstanceState) {
button.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
Intent intent = new Intent();
intent.setClass(ActivityA.this, ActivityB.class);
startActivity(intent);
}
});
}
but I don't understand why this should make my history stack get wiped
out, depending on when the click handler was defined which launches
the intent?
Thanks
On Feb 19, 11:35 am, Mark Wyszomierski <[email protected]> wrote:
> Thanks for posting, I'll make a new project with your code to test.
> Although my G1 is running 1.5, my emulator is using 2.0, so it should
> be testing both situations. Will try yours now,
>
> Thanks
>
> On Feb 19, 11:21 am, jotobjects <[email protected]> wrote:
>
>
>
> > Yes in the last step I get back to ActivityB and you get back to
> > ActivityA so that's different behavior. The only environment
> > difference apparently is that your test is with 1.5 and my test is
> > with 2.0.1, but it doesn't seem like this core behavior would have
> > changed. Here is my app. I'll test your app also.
>
> > <?xml version="1.0" encoding="utf-8"?>
> > <manifest xmlns:android="http://schemas.android.com/apk/res/android"
> > package="foo.singletask"
> > android:versionCode="1"
> > android:versionName="1.0">
> > <uses-sdk android:minSdkVersion="3" />
> > <application android:label="SimpleSingleTask">
> > <activity android:name=".ActivityA"
> > launchMode="singleTask">
> > <intent-filter>
> > <action android:name="android.intent.action.MAIN" />
> > <category
> > android:name="android.intent.category.LAUNCHER" />
> > </intent-filter>
> > </activity>
> > <activity android:name=".ActivityB"/>
> > </application>
> > </manifest>
>
> > - - - - ActivityA.java - - - -
> > package foo.singletask;
>
> > import android.app.Activity;
> > import android.content.ComponentName;
> > import android.content.Intent;
> > import android.os.Bundle;
> > import android.view.View;
> > import android.view.View.OnClickListener;
> > import android.widget.Button;
>
> > public class ActivityA extends Activity
> > {
> > private OnClickListener gotoBClickListener = new
> > GotoBClickListener();
> > private Intent gotoBIntent;
>
> > @Override
> > public void onCreate(Bundle savedInstanceState) {
> > super.onCreate(savedInstanceState);
> > setContentView(R.layout.viewa);
> > Button button = (Button)findViewById(R.id.gotoB);
> > button.setOnClickListener(gotoBClickListener);
> > gotoBIntent = new Intent().setComponent(
> > new ComponentName(this, ActivityB.class));
> > }
>
> > private class GotoBClickListener implements OnClickListener {
> > @Override
> > public void onClick(View v) {
> > startActivity(gotoBIntent);
> > }
> > }
>
> > }
>
> > - - - - ActivityB.java - - - -
> > package foo.singletask;
>
> > import android.app.Activity;
> > import android.os.Bundle;
>
> > public class ActivityB extends Activity
> > {
> > @Override
> > public void onCreate(Bundle savedInstanceState) {
> > super.onCreate(savedInstanceState);
> > setContentView(R.layout.viewb);
> > }
>
> > }
>
> > - - - - res/layout/viewa.xml - - -
> > <?xml version="1.0" encoding="utf-8"?>
> > <Button xmlns:android="http://schemas.android.com/apk/res/android"
> > android:id="@+id/gotoB"
> > android:layout_width="wrap_content"
> > android:layout_height="wrap_content"
> > android:textColor="#FF0000"
> > android:text="This is A - Go to B"/>
>
> > - - - - res/layout/viewb.xml - - -
> > <?xml version="1.0" encoding="utf-8"?>
> > <TextView xmlns:android="http://schemas.android.com/apk/res/android"
> > android:layout_width="fill_parent"
> > android:layout_height="fill_parent"
> > android:textColor="#FF0000"
> > android:text="hello from Activity B"/>
>
> > On Feb 19, 6:36 am, Mark Wyszomierski <[email protected]> wrote:
>
> > > Hi jotobjects,
>
> > > Yes I am running it as you described, here it is exactly:
>
> > > -Run emulator (same on g1 running 1.5)
> > > -Make sure all instances of app are killed (not running from eclipse)
> > > -Start app from app tray, ActivityA is created
> > > -ActivityA launched ActivityB via button click
> > > -Home button
> > > -Open app tray, click app icon
> > > -ActivityA is shown instead of ActivityB
>
> > > are you sure you're getting different behavior? If so, it would be
> > > awesome if you could post your sample, this is definitely not desired
> > > behavior!
>
> > > Thanks
>
> > > On Feb 18, 1:57 pm, jotobjects <[email protected]> wrote:
>
> > > > On quick inspection your app looks almost like the one I tested. My
> > > > test is with the emulator with Android 2.0.1. I am NOT running this
> > > > from eclipse. Any difference from your scenario?
>
> > > > What do you mean by "resume" in your scenario? Do you mean pulling
> > > > down the tray and clicking on the App icon again?
>
> > > > On Feb 18, 12:53 pm, Mark Wyszomierski <[email protected]> wrote:
>
> > > > > Hi jotobjects, that would be really helpful if you could post your
> > > > > example. My simple example is below. Behavior I am seeing is:
>
> > > > > -App Tray
> > > > > -ActivityA
> > > > > -btn click, start ActivityB
> > > > > -home button
> > > > > -resume
> > > > > -ActivityA is shown
>
> > > > > import android.app.Activity;
> > > > > import android.content.Intent;
> > > > > import android.os.Bundle;
> > > > > import android.view.View;
> > > > > import android.view.View.OnClickListener;
> > > > > import android.widget.Button;
>
> > > > > public class ActivityA extends Activity {
> > > > > @Override
> > > > > public void onCreate(Bundle savedInstanceState) {
> > > > > super.onCreate(savedInstanceState);
> > > > > setContentView(R.layout.activitya);
>
> > > > > Button btn = (Button)findViewById(R.id.btn);
> > > > > btn.setOnClickListener(new OnClickListener() {
> > > > > public void onClick(View arg0) {
> > > > > Intent intent = new Intent();
> > > > > intent.setClass(ActivityA.this, ActivityB.class);
> > > > > startActivity(intent);
> > > > > }
> > > > > });
> > > > > }
>
> > > > > }
>
> > > > > import android.app.Activity;
> > > > > import android.os.Bundle;
>
> > > > > public class ActivityB extends Activity {
> > > > > @Override
> > > > > public void onCreate(Bundle savedInstanceState) {
> > > > > super.onCreate(savedInstanceState);
> > > > > setContentView(R.layout.activityb);
> > > > > }
>
> > > > > }
>
> > > > > <activity android:name=".ActivityA"
> > > > > android:label="@string/app_name"
> > > > > android:launchMode="singleTask">
> > > > > <intent-filter>
> > > > > <action android:name="android.intent.action.MAIN" />
> > > > > <category android:name="android.intent.category.LAUNCHER" />
> > > > > </intent-filter>
> > > > > </activity>
>
> > > > > <activity android:name=".ActivityB"
> > > > > android:label="@string/app_name">
> > > > > <intent-filter>
> > > > > <action android:name="android.intent.action.VIEW" />
> > > > > <category android:name="android.intent.category.DEFAULT" />
> > > > > </intent-filter>
> > > > > </activity>
>
> > > > > Thanks
>
> > > > > On Feb 18, 10:18 am, jotobjects <[email protected]> wrote:
>
> > > > > > Just curious since you and others have asked similar questions in
> > > > > > the
> > > > > > past. I just wrote a simple App with ActivityA and ActivityB where
> > > > > > A
> > > > > > issingleTasklaunchMode. If I go A->b->Home->relaunch I get gack to
> > > > > > B. So I cannot replicate the scenario you describe. The code and
> > > > > > all
> > > > > > files for the app are just a couple of dozen lines so I can post if
> > > > > > here if that would be helpful to figure out what you are doing
> > > > > > differently than my test.
>
> > > > > > On Feb 18, 7:09 am, Mark Wyszomierski <[email protected]> wrote:
>
> > > > > > > Hi,
>
> > > > > > > I have an activity, ActivityA, and its launchMode is set to
> > > > > > > "singleTask".
>
> > > > > > > I start the application from the app tray. ActivityA launches
> > > > > > > ActivityB from a button click. ActivityB is a normal activity
> > > > > > > with no
> > > > > > > launchMode set ("standard").
>
> > > > > > > With ActivityB on top of the activity stack, I hit the home
> > > > > > > button,
> > > > > > > then resume the app, I see ActivityA instead of ActivityB when
> > > > > > > resumed.
>
> > > > > > > Shouldn't the history stack be preserved in this case, and B be
> > > > > > > showing? When I resume, I see A get onNewIntent() called, and I'm
> > > > > > > not
> > > > > > > sure why this is happening. I thought the stack would be
> > > > > > > preserved.
>
> > > > > > > Thanks
--
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en