【问题标题】:Switching activities loses functionality切换活动失去功能
【发布时间】:2016-04-21 11:56:30
【问题描述】:

我有一个包含 3 个活动的应用程序

  • 主要活动
  • 计算器活动
  • 信息活动

我的 MainActivity 有一个确认按钮,onClick 会启动 CalculatorActivity 并且一切都正确完成并按预期工作。

CalculatorActivity 有 2 个按钮,一个用于检查内容并显示消息的 calculateButton 和一个用于启动 InformationActivity 的 learnMore 按钮。

当我在 CalculatorActivity 第一次一切正常且正常工作。按下 learnMoreButton 会将我导航到 InformationActivity。该活动如下所示:

信息活动

 goBackButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            switchActivity();
        }
    });
}
public void switchActivity(){
    final Intent intentObj = new Intent(this,CalculatorActivity.class);
    startActivity(intentObj);
}

一个让我回到 CalculatorActivity 的返回按钮。返回似乎破坏了功能。虽然布局在那里并且一切看起来都应该是,但按下按钮(calculateButton、learnMoreButton)确实什么都没有。

计算器活动

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_calculator); final Button calculateButton = (Button) findViewById(R.id.calculateId); final Button learnMoreButton = (Button) findViewById(R.id.learnMoreButtonId);

还有一些 TextView 和 EditText 没有在这里显示,但你明白了。还有一些方法可以进行计算、getter 和 setter。

这个方法 public void switchActivity(){ final Intent intentObj = new Intent(this,Information_activity.class); startActivity(intentObj); }

但我没有使用 onResume()onPause() 或生命周期中除 onCreate() 之外的任何方法。 p>

从我所做的一些搜索中,我发现我在管理活动生命周期的方式上做错了,但我仍然找不到解决方案。开发文档对我没有太大帮助,我发了一个帖子有点像我的老问题。

我的问题是,应该如何完成从 InformationActivityCalculatorActivity 的导航,这样当 CalculatorActivity 返回时功能不会中断与用户交互。应该调用哪个方法onResume()? , onRestart()?它应该是什么样子?

感谢任何愿意提供帮助的人。

P.S:正如我所提到的,我已经阅读了 Activity 生命周期的文档,但我还没有找到解决方案。

【问题讨论】:

  • 如果您明确拥有每次按下时都会启动新活动的按钮,并且即使在返回流程时您也不想使用后退按钮,您可能想在开始新活动之前尝试完成活动一 。您可以在调用 startActivity(intentObj) 后使用 finish()

标签: java android activity-lifecycle


【解决方案1】:

不要每次都开始新的活动,而是完成信息活动。

goBackButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        finish();
    }
});

}

【讨论】:

    【解决方案2】:

    您正在创建太多以这种方式来回移动的活动。您可以使用 finish(); 销毁活动,也可以使用 onBackPressed();

    返回上一个活动
    goBackButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            onBackPressed();
        }
    });
    

    【讨论】:

    • 我认为这应该是分层的,因此您需要声明这些子活动是子活动才能正常工作。
    【解决方案3】:

    试试这个

    goBackButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            InformationActivity.this.finish();
        }
     });
    }
    

    您可以直接完成活动,而不是说要返回哪里,它会自动将您切换到上一个活动。

    【讨论】:

      【解决方案4】:

      我认为您的活动是分层的,因此您应该能够从您的主要计算器活动中执行以下操作:

      Intent i = new Intent(this, InformationActivity.class);
      startActivityForResult(i);
      

      您的后退按钮添加此代码:

      goBackButton.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
              setResult(Result.OK);
              finish();
          }
      });
      

      【讨论】:

        【解决方案5】:

        你们都在建议同样的事情。添加

        Information_Activity.this.finish()

        修复了损坏的功能,虽然你都说对了我只能选择一个答案。

        谢谢

        【讨论】:

          猜你喜欢
          • 2016-03-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多