У меня есть MainActivity
с некоторыми картами, которые имеют разные имена. onClick
, заголовок передается как intent
через adapter
в secondActivity
и отображается как заголовок. Оттуда я могу пойти на другие мероприятия. Если я вернусь из одного из этих других действий (с помощью кнопки «Назад», созданной путем установления второго действия в качестве родительского действия), заголовок исчезнет. Как мне сохранить заголовок, который изначально был передан как намерение, или я должен сделать это совершенно иначе?
Я пытался использовать onResume()
и onStart()
в secondActivity
для переназначения намерения из глобальной переменной.
Класс adapter
, в котором написан метод карты onClick
:
@Override
public void onBindViewHolder(final TripHolder tripHolder, final int position) {
Trip trip = trips.get(position);
tripHolder.setDetails(trip);
tripHolder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(context, SecondActivity.class);
TextView card_title = v.findViewById(R.id.TripNamecl);
intent.putExtra("card_title", card_title.getText().toString());
context.startActivity(intent);
}
});
}
secondActivity
, где должен отображаться заголовок:
public class SecondActivity extends AppCompatActivity {
String name;
TextView header;
static final String STATE_HEADER = "header";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
name = getIntent().getStringExtra("card_title");
header = findViewById(R.id.TripsHeader);
header.setText(name);
}
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
savedInstanceState.putString(STATE_HEADER, name);
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
name = savedInstanceState.getString(STATE_HEADER);
header.setText(name);
}
public void launchMapsActivity(View view) {
Uri gmmIntentUri = Uri.parse("geo:48.8566°,2.3522");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
if (mapIntent.resolveActivity(getPackageManager()) != null) {
startActivity(mapIntent);
}
}
public void launchTravelActivity(View view) {
Intent intent = new Intent(this, TravelActivity.class);
startActivity(intent);
}
public void launchPlansActivity(View view) {
Intent intent = new Intent(this, PlansActivity.class);
startActivity(intent);
}
}
РЕШЕНИЕ:
Решением было поместить android: launchMode = "singleTop" в файл манифеста для второй активности. Более подробно это описано здесь: Как правильно вернуться к родительскому занятию?