OnResume() не вызывается в дочерней активности при использовании с TabGroupActivity в Xamarin Droid

Я использую Tabgroupactivity в Xamarin для разработки приложения для дроидов. У меня есть TabGroupActivity с 4 дочерними действиями.

OnResume() не вызывается ни в одном из дочерних действий.

Может ли кто-нибудь помочь мне с правильным решением, почему оно не вызывается !! или есть ли ошибка в моем коде?

TabGroupActivity.cs

namespace RB.Droid
{
[Activity (Label = "TabGroupActivity")]         
public class TabGroupActivity : ActivityGroup
{


    private List<string> _idList;

    protected override void OnCreate (Bundle bundle)
    {
        base.OnCreate (bundle);

        if (_idList == null)
            _idList = new List<string> ();



    }


    public void StartChildActivity (string id, Intent intent)
    {
        intent.AddFlags (ActivityFlags.ClearTop);

        var manager = new LocalActivityManager (this, false);

        var window = MainTabActivity.localActivityManager.StartActivity (id, intent);
        if (window != null) {
            _idList.Add (id);
            SetContentView (window.DecorView);
        }
    }

    public override void FinishActivityFromChild (Activity child, int requestCode)
    {
        var manager = new LocalActivityManager (this, false);
        var index = _idList.Count - 1;

        if (index < 1) {
            Finish ();
            return;
        }

        MainTabActivity.localActivityManager.DestroyActivity (_idList [index], true);
        _idList.RemoveAt (index);
        index--;
        var lastId = _idList [index];
        var lastIntent = MainTabActivity.localActivityManager.GetActivity (lastId).Intent;
        var newWindow = MainTabActivity.localActivityManager.StartActivity (lastId, lastIntent);
        SetContentView (newWindow.DecorView);     
    }

    public override bool OnKeyDown (Keycode keyCode, KeyEvent e)
    {
        if (keyCode == Keycode.Back) {
            return true;
        }
        return base.OnKeyDown (keyCode, e);
    }

    public override bool OnKeyUp (Keycode keyCode, KeyEvent e)
    {
        if (keyCode == Keycode.Back) {
            OnBackPressed ();
            return true;
        }
        return base.OnKeyUp (keyCode, e);
    }

    public override void OnBackPressed ()
    {
        var length = _idList.Count;
        if (length > 1) {
            var manager = new LocalActivityManager (this, false);

            var current = MainTabActivity.localActivityManager.GetActivity (_idList [length - 1]);
            FinishActivityFromChild (current, 0);
        }
    }


}
}

НастройкиActivityGroup.cs

namespace RB.Droid
{

[Activity (Label = "SettingsActivityGroup")]            
public class SettingsActivityGroup : TabGroupActivity
{
    protected override void OnCreate (Bundle bundle)
    {
        base.OnCreate (bundle);

        // Create your application here
        StartChildActivity ("Settings", new Intent (this, typeof(Settings)));
    }
}
}

Настройки.cs

namespace RB.Droid
{

[Activity (Label = "Settings")]         
public class Settings : Activity
{
    protected override void OnCreate (Bundle bundle)
    {
        base.OnCreate (bundle);

        // Create your application here
        TextView tv = new TextView (this);
        tv.Text = "Settings";
        SetContentView (tv);
    }

    protected override void OnResume ()
    {
        base.OnResume ();

        Toast.MakeText (this, "ON RESUME NOT CALLED", ToastLength.Long);
    }
}
}

person Ravitheja    schedule 11.08.2015    source источник
comment
Опишите, что вы делаете, когда хотите вызвать метод OnResume (информация о методе: developer.android.com/reference/android/app/)   -  person Joehl    schedule 11.08.2015
comment
@Joehl: я хочу вызвать метод, в котором пользователь должен проверять свой логин всякий раз, когда он выходит на экран. Итак, я хочу вызвать метод в onResume(). Он работает в Android, но, к моему сожалению, не работает с xamarin.   -  person Ravitheja    schedule 11.08.2015


Ответы (1)


Для этого используйте метод OnStart. Мы используем этот метод для загрузки/обновления некоторых данных пользовательского интерфейса при отображении представления.

OnResume: действие переходит в состояние паузы, когда на него наступает другое действие. В этом случае, когда пользователь нажимает кнопку "Назад", вызывается onResume get.

Дополнительная информация и хорошее объяснение жизненного цикла активности: см. этот ответ

person Joehl    schedule 12.08.2015
comment
да, но если вы переключаетесь между вкладками, OnStart() не будет вызываться. поэтому мне нужно вызывать этот метод даже при переключении между вкладками. - person Ravitheja; 12.08.2015