Intent 를 이용한 예제를 보여드릴게요.
AndroidManifest.xml에 액티비티를 하나만 띄우기 위해 singleTask 를 추가합니다.
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
...>
<application
....>
<activity
android:name=".MainActivity"
android:exported="true"
android:launchMode="singleTask">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
SubActivity의 버튼 클릭이벤트를 처리합니다. 버튼을 누를 때 MainActivity로 버튼상태를 전달합니다.
public class SubActivity extends AppCompatActivity {
public static final String EXTRA_RESET_VISIBILITY = "ResetVisibility";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sub);
setupViews();
}
private void setupViews() {
findViewById(R.id.resetH).setOnClickListener(view -> {
setVisibleReset(View.VISIBLE);
});
findViewById(R.id.resetH2).setOnClickListener(view -> {
setVisibleReset(View.INVISIBLE);
});
}
private void setVisibleReset(int visibility) {
Intent intent = new Intent(this, MainActivity.class);
intent.putExtra(EXTRA_RESET_VISIBILITY, visibility);
startActivity(intent);
finish();
}
}
MainActiity가 singleTask일 때는 onNewIntent메소드가 호출됩니다. 해당 메소드를 오버라이드합니다.
public class MainActivity extends AppCompatActivity {
private Button resetB;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setupViews();
}
private void setupViews() {
resetB = findViewById(R.id.resetB);
resetB.setOnClickListener(view -> {
showSubActivity();
});
}
private void showSubActivity() {
Intent intent = new Intent(this, SubActivity.class);
startActivity(intent);
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
int visibility = intent.getIntExtra(SubActivity.EXTRA_RESET_VISIBILITY, View.VISIBLE);
resetB.setVisibility(visibility);
}
}
다른 추가설명없이 직관적으로 이해할 수 있는 코드입니다. 천천히 보시면 충분히 이해가 가실겁니다.