prextor
prextor

Reputation: 306

Use Intent and call activity on backstack

So I'm really confused right now. I have two activities: MainActivity and Main2Activity. I change a value in MainActivity of a textview to "clicked". Then I want to call Main2Activity, change something in there and go back to MainActivity. When I'm going back to MainActivity i want the state to be as I called Main2Activity. How do i get back to the state from MainActivity when I left (=> textview should say "clicked" and not "hello world" as defined in XML)? Here is my code so far: MainActivity:

 package com.plabsproject.testapp;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    private Button btn1;
    private TextView textanzeige;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        if (savedInstanceState == null) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);

            btn1 = (Button) findViewById(R.id.button1);
            btn1.setOnClickListener(btnListener);
            textanzeige = (TextView) findViewById(R.id.helloworld);
            textanzeige.setOnClickListener(btnListener);
            }

        else if (savedInstanceState != null){
            Toast.makeText(this, "Test", Toast.LENGTH_SHORT).show();
        }
        }



        private View.OnClickListener btnListener = new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (view == btn1) {
                    Intent wechselActivity = new Intent(view.getContext(), Main2Activity.class);
                    startActivity(wechselActivity);
                    finish();

                } else if (view == textanzeige) {
                    TextView ändereText = (TextView) findViewById(R.id.helloworld);
                    ändereText.setText("clicked");
                }
            }
        };


}

and Main2Activity:

    package com.plabsproject.testapp;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class Main2Activity extends AppCompatActivity {

    private Button btn1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);

        btn1 = (Button) findViewById(R.id.Activity2_Button);
        btn1.setOnClickListener(zurück_zur_Activty_1);

    }

    private View.OnClickListener zurück_zur_Activty_1 = new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (view == btn1){
                Intent wechselActivity = new Intent(view.getContext(), MainActivity.class);
                wechselActivity.addFlags(Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY);
                startActivity(wechselActivity);
                finish();
            }
        }
    };
}

I think, that this problem is somehow related to the setFlags, but for some reasons, it doesn't work as expected.

Thank you!

Upvotes: 0

Views: 33

Answers (1)

Durga M
Durga M

Reputation: 544

Instead of calling startActivity() you can use startActivityForResult() in MainActivity, but don't call finish() in main activity.

Then in Main2Activity set the result by calling setResult(), which will return to the MainActivity.

For more details you can visit the site https://developer.android.com/training/basics/intents/result.html

When you are calling finish(), the activity will remove from memory, so you will not get the previous changes.

Upvotes: 2

Related Questions