1

I have one activity which has 2 button clicking on which takes to second and third activity. Second activity has 2 buttons "return to main activity" and "click to third activity". When I click on to "return main activity button" it isn't returning to main activity screen But when I click on "go to 3rd activity" button it is going to third activity. Can someone help me why my "return main activity button" isn't working?

here is my code

main activity { package com.example.aditya.activitywithinactivity; import android.content.Intent; import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.View; import android.view.Menu; import android.view.MenuItem; import android.widget.Button; import android.view.View.OnClickListener; import static com.example.aditya.activitywithinactivity.R.id.start; public class MainActivity extends AppCompatActivity implements View.OnClickListener { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button bttn1 = (Button) findViewById(R.id.button1); bttn1.setOnClickListener(MainActivity.this); Button bttn2 = (Button) findViewById(R.id.button2); bttn2.setOnClickListener(MainActivity.this); } public void onClick(View v) { switch (v.getId()) { case R.id.button1: { Intent intent = new Intent(MainActivity.this, SecondActivity.class); startActivity(intent); } case R.id.button2: { Intent intent1 = new Intent(MainActivity.this, ThirdActivity.class); startActivity(intent1); } } } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); setContentView(R.layout.activity_main); }; } 

SecondActivity.java

package com.example.aditya.activitywithinactivity; import android.content.Intent; import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.View; import android.widget.Button; public class SecondActivity extends AppCompatActivity implements View.OnClickListener { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); Button bttn3 = (Button) findViewById(R.id.button3); bttn3.setOnClickListener(SecondActivity.this); Button bttn4 = (Button) findViewById(R.id.button4); bttn4.setOnClickListener(SecondActivity.this); } public void onClick(View v) { switch (v.getId()) { case R.id.button3: { Intent intent2 = new Intent(this, MainActivity.class); intent2.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); intent2.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); startActivity(intent2); } case R.id.button4: { Intent intent3 = new Intent(SecondActivity.this, ThirdActivity.class); startActivity(intent3); } } }; } 

activity_main.xml

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical"> <EditText android:id="@+id/myText1" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="buttonClicked" android:text="Click to go to Secondary Activity" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="buttonClicked" android:text="Click to go to Third Activity" /> <Button android:id="@+id/button" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Button" /> </LinearLayout> 

activity_second

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/myText2" /> <Button android:id="@+id/button3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="buttonClicked" android:text="Return to Main Activity"/> <Button android:id="@+id/button4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="buttonClicked" android:text="Click to go to Third Activity"/> </LinearLayout> 
2
  • 2
    Perhaps you should remove the onClick attribute from the xml as you are already implementing an onClickListener in your activities anyway? Commented Oct 18, 2016 at 6:02
  • Also, for the context of the intent you are having an issue with you put only "this" instead of SecondActivity.this. Commented Oct 18, 2016 at 6:17

5 Answers 5

2

try this:

public void onClick(View v) { switch (v.getId()) { case R.id.button3: { Intent intent2 = new Intent(SecondActivity.this, MainActivity.class); startActivity(intent2); break; } case R.id.button4: { Intent intent3 = new Intent(SecondActivity.this, ThirdActivity.class); startActivity(intent3); break; } } }; 
Sign up to request clarification or add additional context in comments.

4 Comments

Thanks for the help.
I just added this line intent2.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
And added break statement too;
@mia ok good.if any answer help to you then upvote it or accept it
1

You can call method onBackPressed(); when return MainActivity button is clicked like this in SecondActivity.java and use break in switch statement

 public void onClick(View v) { switch (v.getId()) { case R.id.button3: onBackPressed(); break; case R.id.button4: Intent intent3 = new Intent(SecondActivity.this, ThirdActivity.class); startActivity(intent3); break; } }; 

1 Comment

This will also misbehave. break or return is essential in such case.
1

change in MainActivity

Intent i= new Intent(MainActivity.this, SecondActivity.class); i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(i); finish(); 

Comments

0

The two lines code is in your source:

intent2.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); intent2.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 

I want to know what do you want to do between two activities. The two sources follow can do it, but they are different.

 //Source code 1: Intent intent2 = new Intent(SecondActivity.this, MainActivity.class); startActivity(intent2); //Source code 2: onBackPressed(); // or finish(); 

If use source code 1, the activities task will create another MainActivity object and put it to the top of task.

MainActivity@obj1 | SecondActivity@obj1 ==>

MainActivity@obj1 | SecondActivity@obj1 | MainActivity@obj2

If use source code 2, the activities tasks will remove SecondActivity object so that the MainActivity object at the top.

MainActivity@obj1 | SecondActivity@obj1 ==>

MainActivity@obj1

Comments

-1

There is no break; statement in your switch. It just continues to the next case step and therefore next activity. Also you can simply call finish() to end your current activity and go back - this will work better for your backstack. Anyway add break; after each case. Please check this Oracle tutorial about Switch statement.

3 Comments

tried break and finish() both none of them is working.
You should use them anyway. Now I just saw the comment under your original question and completely agree - the onClicks are handled by your code and it should be removed from xml completely.
Thanks for the help.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.