后退按钮停止只能在一个Activity中工作

时间:2017-08-23 07:54:03

标签: android android-navigation

后退按钮停止只能在一个Activity中工作。我有三个活动有同一个父母。但其中一人停下来回来(CurrentMovieActivity)。我无法弄清楚为什么。清单似乎是正确的。

可能的原因是什么?

我的宣言:

<application
android:allowBackup="true"
android:icon="@mipmap/ic_movie_white_24dp"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_movie_white_24dp"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".activity.MovieActivity">
  <meta-data
    android:name="android.app.searchable"
    android:resource="@xml/searchable" />

  <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <action android:name="android.intent.action.SEARCH" />

    <category android:name="android.intent.category.LAUNCHER" />
  </intent-filter>
</activity>
<activity
  android:label="@string/settings_title"
  android:name=".activity.SettingsActivity"
  android:parentActivityName=".activity.MovieActivity" />
<activity
  android:label="@string/current_title"
  android:name=".activity.CurrentMovieActivity"
  android:parentActivityName=".activity.MovieActivity" />
<activity
  android:label="@string/favourites"
  android:name=".activity.FavouritesActivity"
  android:parentActivityName=".activity.MovieActivity" />

<provider
  android:authorities="com.globallogic.v_holodynskyi.imdbclient"
  android:exported="false"
  android:name=".database.MovieProvider" />

我还尝试更改启动模式并覆盖onBackPress。它看起来像这样,但我看不到任何日志:

@Override
public void onBackPressed() {
  Log.i(LOG_TAG, "back pressed1");
  super.onBackPressed();
  Log.i(LOG_TAG, "back pressed2");
}

我的“破碎”活动:

public class CurrentMovieActivity extends AppCompatActivity {
  private static final String LOG_TAG = CurrentMovieActivity.class.getSimpleName();

  private ImageView mPoster;
  private TextView mMovieTitle;
  private TextView mMovieDescription;
  private FloatingActionButton mFloatingButton;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_current_movie);

    initializeVariables();
  }

  @Override
  public void onBackPressed() {
    Log.i(LOG_TAG, "back pressed1");
    super.onBackPressed();
    Log.i(LOG_TAG, "back pressed2");
  }

  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater menuInflater = getMenuInflater();
    menuInflater.inflate(R.menu.current_menu, menu);
    return true;
  }

  @Override
  public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
      case R.id.action_favourite:
        Intent openFavourite = new Intent(this, FavouritesActivity.class);
        startActivity(openFavourite);
        break;
      default:
        break;
    }
    return true;
  }

  private void initializeVariables() {
    Intent intent = getIntent();

    final String title = intent.getExtras().getString(Intent.EXTRA_TEXT + TITLE);
    final String overview = intent.getExtras().getString(Intent.EXTRA_TEXT + DESCRIPTION);
    final String posterLocation = intent.getExtras().getString(Intent.EXTRA_TEXT + LOCATION);

    mPoster = findViewById(R.id.iv_movie_poster_current);
    downloadImage(posterLocation, mPoster);

    mMovieTitle = findViewById(R.id.tv_movie_title);
    mMovieTitle.setText(title);

    mMovieDescription = findViewById(R.id.tv_movie_description_current);
    mMovieDescription.setText(overview);

    mFloatingButton = findViewById(R.id.fb_add_to_favourites);
    mFloatingButton.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View view) {
        saveMovie(CurrentMovieActivity.this, title, overview, posterLocation, CONTENT_URI);
      }
    });
  }
}

2 个答案:

答案 0 :(得分:2)

这可能是因为使用了android:parentActivityName。当您使用该属性时,它会使您的代码在android.R.id.home方法中检查onOptionsItemSelected

您需要在交换机中检查android.R.id.home不要使用默认案例,如下所示:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
  switch (item.getItemId()) {
    ...
    case android.R.id.home:
      finish(); // call finish and don't use default case.
      break;
  }
  return true;
} 

以下是相关文档:Providing Up Navigation

答案 1 :(得分:1)

检查覆盖 onBackPress()代码,因为您已删除其中的代码。在 onBackPress(),。

中添加finish()