Как реализовать getSupportParentActivityIntent() для динамической установки активности для кнопки вверх в Android
Как узнать, какая родительская активность вызывает активность ребенка в Android?
Предположим, у меня есть три вида деятельности A,B и C. A и B являются родительскими действиями. С - детская активность. Это означает, что C может быть запущен из A или B.
Итак, как я могу узнать, какая родительская активность вызывает начало детской активности?
Проблема в том, что мне нужно установить кнопку возврата в соответствии с этим родительским намерением. Для этого я хочу переопределить метод getSupportParentActivityIntent(), и ему нужен объект намерения для повторного запуска родительского действия.
Вот описание метода на сайте Android
Как заставить родительское действие корректно переопределить метод getSupportParentActivityIntent()?
Благодарю.
2 ответа
Я нашел, как правильно реализовать getSupportParentActivityIntent() и, используя его, мы можем динамически установить активность на кнопку вверх в Android. Вот как я этого добился.
Предположим, у нас есть два вида деятельности. Деятельность A и B. A - родительская деятельность, а B - ребенок.
Поэтому необходимо создать намерение для начала B. Он должен передать дополнительные данные, которые являются именем родительской деятельности. Здесь в нашем примере это должно быть 'A'. Вот код,
Intent intent = new Intent();
intent.putExtra("ParentClassName","A");
startActivity(intent.setClass(A.this, B.class)); //we are starting activity 'B'
Теперь в действии B нам нужно переопределить getSupportParentActivityIntent(), и это должно выглядеть так,
@Override
public Intent getSupportParentActivityIntent() {
Intent parentIntent= getIntent();
String className = parentIntent.getStringExtra("ParentClassName"); //getting the parent class name
Intent newIntent=null;
try {
//you need to define the class with package name
newIntent = new Intent(B.this,Class.forName("com.myapplication."+className));
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return newIntent;
}
В твоей детской деятельности используйте как
@Override
public Intent getSupportParentActivityIntent() {
String from = getIntent().getExtras().getString("from");
Intent newIntent = null;
if(from.equals("MAIN")){
newIntent = new Intent(this, MainActivity.class);
}else if(from.equals("FAV")){
newIntent = new Intent(this, FavoriteActivity.class);
}
...
return newIntent;
}
перед этим вам нужно использовать дополнительные значения для каждого из ваших исходных действий, скажем, из FavoriteActivity.
i.putExtra("from", "FAV");
и для использования MainActivity
i.putExtra("from", "MAIN");