何时完成意图

时间:2018-09-01 15:14:43

标签: android android-intent

我已经创建了一个ButtomNavigationBar,每次我在栏中选择其他项目时,它都会启动另一个意图,因此,当我按下“返回”按钮时,它将经历所有已开始的活动。 因此,我发现每次选择其他项目时都使用finish()的临时解决方案,但是现在当我在该项目上单击两次时,应用程序完成了

bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
  @Override
  public boolean onNavigationItemSelected(@NonNull MenuItem item) {
    int i = item.getItemId();
    if (i == R.id.navigation_home) {
      item.setCheckable(false);
      finish();
      return true;
    } else if (i == R.id.navigation_dashboard) {
      Intent intent1 = new Intent(Home.this, ActivityOne.class);
      startActivity(intent1);
      item.setCheckable(true);
      finish();
      return true;
    } else if (i == R.id.navigation_notifications) {
      Intent intent2 = new Intent(Home.this, ActivityTwo.class);
      startActivity(intent2);
      item.setCheckable(true);
      finish();
      return true;

    } else if (i == R.id.nav_slideshow) {
      Intent intent3 = new Intent(Home.this, ActivityThree.class);
      startActivity(intent3);
      item.setCheckable(true);
      finish();
      return true;
    }

    return false;
  }

});

2 个答案:

答案 0 :(得分:0)

这可以帮助吗?

bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
    int lastItemId = -1;

    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
        int i = item.getItemId();
        if (i == R.id.navigation_home && lastItemId != i) {
            lastItemId = i;
            item.setCheckable(false);
            finish();
            return true;
        } else if (i == R.id.navigation_dashboard && lastItemId != i) {
            lastItemId = i;
            Intent intent1 = new Intent(Home.this, ActivityOne.class);
            startActivity(intent1);
            item.setCheckable(true);
            finish();
            return true;
        } else if (i == R.id.navigation_notifications && lastItemId != i) {
            lastItemId = i;
            Intent intent2 = new Intent(Home.this, ActivityTwo.class);
            startActivity(intent2);
            item.setCheckable(true);
            finish();
            return true;

        } else if (i == R.id.nav_slideshow && lastItemId != i) {
            lastItemId = i;
            Intent intent3 = new Intent(Home.this, ActivityThree.class);
            startActivity(intent3);
            item.setCheckable(true);
            finish();
            return true;
        }

        return false;
    }

});

答案 1 :(得分:0)

您可以在清单活动标签中使用android:noHistory="true",而不是每次手动完成活动

为活动设置android:noHistory="true"时,该活动没有任何后退历史记录。这意味着,如果您退出此活动,则无法通过按“后退”按钮返回。与您使用finish();

的行为相同

您可以像这样在清单中设置

<application ... >
    <activity android:name="com.example.myapp.MainActivity"
              android:noHistory="true">
    </activity>
</application>

请记住,仅将noHistory设置为您不想通过回退来返回的活动