Как реализовать 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");
Другие вопросы по тегам