java - 向上导航按钮在没有自定义工具栏的基本 Android 应用程序中不起作用

标签 java android android-toolbar

我的应用程序工具栏向上按钮有问题,在子 Activity 中按下该按钮时,它永远不会通过 onOptionsItemSelected 方法上的 R.id.home

主要 Activity

package com.foocorp.firstapp;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class InstrumentListActivity extends AppCompatActivity
        implements IUdpNotificationListener
{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_my);

        getSupportActionBar().setHomeButtonEnabled(true);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        getMenuInflater().inflate(R.menu.menu_my, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        int id = item.getItemId();


        if (id == R.id.action_settings) {
            return true;
        }
        if (id == R.id.home) {
            Toast.makeText(getApplicationContext(), "Clicked Menu back from Main", Toast.LENGTH_SHORT).show();
            finish();
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    public void onBackPressed() {

        Toast.makeText(getApplicationContext(), "Clicked Hard back from Main", Toast.LENGTH_SHORT).show();
        finish();
    }
}

我设置 setDisplayHomeAsUpEnabled(true);

的子 Activity
package com.foocorp.firstapp;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.CheckBox;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class InstrumentViewDetailsActivity extends AppCompatActivity implements IUdpNotificationListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_instrument_view_details);

        getSupportActionBar().setHomeButtonEnabled(true);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);

        Intent intent = getIntent();

        //whatever here
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        getMenuInflater().inflate(R.menu.menu_instrument_view_details, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        int id = item.getItemId();


        if (id == R.id.action_settings) {
            return true;
        }
        //=> never get called because passed ID is never R.id.home
        if (id == R.id.home) {
            Toast.makeText(getApplicationContext(), "Clicked Menu back from Details", Toast.LENGTH_SHORT).show(); 
            finish();
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    @Override
    public void onBackPressed() {

        Toast.makeText(getApplicationContext(), "Clicked Hard back from Details", Toast.LENGTH_SHORT).show(); // this works fine
        finish();
    }

}

定义父子关系的 list 文件

    <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.foocorp.firstapp">

    <uses-permission android:name="android.permission.INTERNET" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_tap_and_play_white_24dp"
        android:label="@string/app_name"
        android:theme="@style/AppTheme">

        <activity
            android:name="com.foocorp.firstapp.InstrumentListActivity"
            android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity
            android:name=".InstrumentViewDetailsActivity"
            android:label="@string/instrum_details"
            android:parentActivityName="com.foocorp.firstapp.InstrumentListActivity">
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="com.foocorp.firstapp.InstrumentListActivity" />
        </activity>
    </application>

</manifest>

子Activity的菜单布局文件(顺便说一句,UP按钮虽然在应用程序运行时出现,但没有定义在这里是否正常?)

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.foocorp.firstapp.InstrumentViewDetailsActivity">

<item
    android:id="@+id/action_settings"
    android:orderInCategory="100"
    android:title="@string/action_settings"
    app:showAsAction="never" />
</menu>

在互联网上搜索此解决方案时,我在 list 文件和 getSupportActionBar().setHomeButtonEnabled(true); 中找到了有关父/子关系的提示,但尽管有这些提示,我无法让这个 UP 工具栏按钮正常工作:它确实返回到父 Activity ,但不是以正确的方式返回,就像我按下后退按钮调用 onBackPressed() 方法并且工作正常.

关于我在这里遗漏了什么的任何线索?

最佳答案

改变后退按钮的id R.id.homeandroid.R.id.home 在你的 onOptionsItemSelected() 方法。

您还可以使用 NavUtils.navigateUpFromSameTask(this); 而不是 finish(); 正如您在 中提到的 parentActivityName AndroidManifest.xml.

关于java - 向上导航按钮在没有自定义工具栏的基本 Android 应用程序中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32477036/

相关文章:

java - 调用 Activity - 表达式 - 如何

android - 如何以编程方式设置默认应用启动器?

java - 如何在Parcelable类中实现读写

android - 如何在 CoordinatorLayout 滚动时为顶部和底部工具栏(或任何其他 View )设置动画进入/退出屏幕?

android - 协调器布局 : Hiding/Showing half visible toolbar?

android - 使用 <include> 标签时如何将 TextView 添加到工具栏?

java - maven 中的复杂配置文件

java - 使用 PEM 私钥签名字符串

java - 项目构建错误: Non-resolvable parent POM for org. springframework.boot:spring-boot-starter-parent:[未知版本]:传输失败

android - Libgdx 设置 UI 在新 GWT 项目中出现 2 个意外错误