我的应用程序工具栏向上按钮有问题,在子 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);
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.home
到 android.R.id.home
在你的 onOptionsItemSelected()
方法。
您还可以使用 NavUtils.navigateUpFromSameTask(this);
而不是 finish();
正如您在 中提到的
.parentActivityName
AndroidManifest.xml
关于java - 向上导航按钮在没有自定义工具栏的基本 Android 应用程序中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32477036/