按下后退按钮一次完成活动

时间:2018-05-28 07:41:31

标签: android xamarin.android

在我的应用程序中,我遇到了这样一个问题:只有当按下两次后退按钮时,活动(例如:Activity_B)才会关闭。我希望在按下后退按钮一次后关闭Activity_B,然后在后面显示Activity_A。

我试过这段代码:

    public override void OnBackPressed()
    {
        base.OnBackPressed();
        //MoveTaskToBack(true);
        this.Finish();            
        Finish();
        FinishAndRemoveTask();
    }

但行为仍然相同。 我尝试调试调试器点,看看它的行为方式。 按下后退按钮时会调用Activity_B。

启动Activity_B的代码是:

 private void OnDataLayout_Click(object sender, EventArgs e)
    {            
        Intent intent = new Intent(this, typeof(Activity_B));
        StartActivity(intent);
    }

非常感谢任何帮助。

Update1:​​我发现OnDataLayout_Click事件也被调用了两次,在导航到Activity_B的OnCreate()后,OnCreate()也被调用了两次。

2 个答案:

答案 0 :(得分:0)

如果您想从Activity A Activity B返回onBackpressed,则无需为backpressed编写任何代码,但如果您想退出Backprssed { {1}} {}未转到Activity B,您需要Activity A

finish()

答案 1 :(得分:0)

  

OnDataLayout_Click事件也被调用两次

如果您的Button的点击事件被绑定了两次,则点击事件将被调用两次。

如下面的代码:

public class MainActivity : AppCompatActivity
{
    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);

        // Set our view from the "main" layout resource
        SetContentView(Resource.Layout.activity_main);
        initView();

    }

    protected override void OnResume()
    {
        base.OnResume();
        initView();
    }
    private void initView()
    {
        Button bt = FindViewById<Button>(Resource.Id.bt);
        bt.Click += Bt_Click;
    }

    private void Bt_Click(object sender, System.EventArgs e)
    {
        Intent intent = new Intent(this, typeof(Activity1));
        StartActivity(intent);
    }
}

initView方法被调用了两次,OnCreateOnResume方法。这将导致您的问题。

但是,如果你使用SetOnClickListener方法,问题就会消失:

public class MainActivity : AppCompatActivity,View.IOnClickListener
{
    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);

        // Set our view from the "main" layout resource
        SetContentView(Resource.Layout.activity_main);
        initView();

    }

    protected override void OnResume()
    {
        base.OnResume();
        initView();
    }
    private void initView()
    {
        Button bt = FindViewById<Button>(Resource.Id.bt);
        bt.SetOnClickListener(this);
    }



    public void OnClick(View v)
    {
        Intent intent = new Intent(this, typeof(Activity1));
        StartActivity(intent);
    }
}