Matjaz Kristl
Matjaz Kristl

Reputation: 756

Start activity without showing it

I have an activity A, which starts activity B and activity B starts activity C. Is there a way not to show activity B. I want this behavour because if there is no content (eg for ListView) for activity B, show activity C on which I select some data, and then press back button to go back to activity B. The point is that I would like to have activity B on activity stack, but not to show it in certain cases.

Upvotes: 18

Views: 26949

Answers (5)

Omid Omidi
Omid Omidi

Reputation: 1670

In your manifest set

android:theme="@android:style/Theme.NoDisplay"

for your activity.

Upvotes: 15

Matjaz Kristl
Matjaz Kristl

Reputation: 756

I found the solution:

  • Activity A starts activity B with extra parameter (intent.putExtra("something", true))
  • Activity B:
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (getIntent().hasExtra("something") && getIntent().getBooleanExtra("something", false) {
            //show activity B
        setContentView(R.layout.activity_B);
    } else {
            //don't show activity B, start activity C
        startActivityForResult(activity_C, ACTIVITY_NOT_INITIALIZED); //start activity C
    }
}

//when came back from activity C, check if activity B was already initialized

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == ACTIVITY_NOT_INITIALIZED) {
        //show activity B
        setContentView(R.layout.activity_B);
  }
}

Upvotes: 18

ShineDown
ShineDown

Reputation: 1879

do not set setContentView() for activity B

Upvotes: 3

Dimitris Makris
Dimitris Makris

Reputation: 5183

You can call startActivity, without calling setContentView for a layout. Hope this helps!

Upvotes: 0

Jin35
Jin35

Reputation: 8612

just call startActivity() in onCreate() method of activity B. It will not be shown, but it will be in activity stack.

Upvotes: 1

Related Questions