[英]Android - Back button in the title bar for MapsActivity
我正在制作一個Android應用程序,該應用程序在MainActivity
用戶中選擇ListView
一個項目,然后出現MapsActivity
。 我想要標題欄中的返回按鈕以返回MainActivity
。
我嘗試了一些解決方案,例如:
Android-標題欄中的“后退”按鈕,然后
在操作欄上顯示后退按鈕,然后
它們不適合我,因為我正在使用MapsActivity
。
我想應該為MapsAvtivity
執行另一種方法。
這是我的代碼:
清單文件:
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/Theme.AppCompat.Light.NoActionBar" >
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="@string/google_maps_key"
/>
<activity
android:name=".MapsActivity"
android:label="@string/title_activity_maps"
android:parentActivityName=".MainActivity" >
<!-- Parent activity meta-data to support 4.0 and lower -->
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.shmj.monmemorableplaces.MainActivity" />
</activity>
</application>
MapsActivity.java:
public class MapsActivity extends AppCompatActivity implements OnMapReadyCallback {
private GoogleMap mMap;
SupportMapFragment mapFragment;
Intent mainIntent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps);
mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
mainIntent = new Intent(getApplicationContext(), MainActivity.class);
ActionBar actionBar = getActionBar();
getActionBar().setHomeButtonEnabled(true);
getActionBar().setDisplayHomeAsUpEnabled(true);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
mainIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(mainIntent);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
}
和logcat:
04-25 14:32:41.376 9010-9010 / com.shmj.monmemorableplaces E / AndroidRuntime:致命例外:主進程:com.shmj.monmemorableplaces,PID:9010 java.lang.RuntimeException:無法啟動活動ComponentInfo {com。 shmj.monmemorableplaces / com.shmj.monmemorableplaces.MapsActivity}:java.lang.NullPointerException:嘗試在android.app.ActivityThread.performLaunchActivity 的空對象引用上調用虛擬方法'void android.app.ActionBar.setHomeButtonEnabled(boolean)' (ActivityThread.java:3124)在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3233)在android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:5120)在android.app.ActivityThread.access $ 1100(ActivityThread.java :197)在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1662)在android.os.Handler.dispatchMessage(Handler.java:102)在android.os.Looper.loop(Looper.java:145)在android.app.ActivityThread.main(ActivityThread.java:6856)在java.lang.reflect.Method.invoke (本機方法)在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1404)在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(在com.android.internal.os .ZygoteInit.main(ZygoteInit.java:1199) 原因:java.lang.NullPointerException:嘗試在com.shmj.monmemorableplaces 上的空對象引用上調用虛擬方法'void android.app.ActionBar.setHomeButtonEnabled(boolean)' 。 com.shmj.monmemorableplaces.MapsActivity $ override.access $ dispatch(MapsActivity.java)位於com.shmj.monmemorableplaces.MapsActivity.onCreate(MapsActivity.java:0)位於com.shmj.monmemorableplaces.MapsActivity $ override.access $ dispatch(MapsActivity.java) android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1120)位於android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3077)位於android.app.ActivityThread處的.app.Activity.performCreate(Activity.java:6550)位於android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:5120)的handleLaunchActivity(ActivityThread.java:3233) android.os.Handler.dispatchMessage(Handler.java:102)上的android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1662)上的android.app.ActivityThread.access $ 1100(ActivityThread.java:197)。 android.app.ActivityThread.main(ActivityThread.java:6856)上的os.Looper.loop(Looper.java:145)在java.lang.reflect.Method上的java.lang.reflect.Method.invoke(Native Method)上。 com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1404)處com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)處調用(Method.java:372)
public class MapsActivity extends AppCompatActivity
如果您正在使用最新的appcompact庫,請使用AppCompatActivity
。
並且也改變
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps);
ActionBar actionBar = getSupportActionBar();
assert actionBar != null;
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setHomeButtonEnabled(true);
mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
mainIntent = new Intent(getApplicationContext(), MainActivity.class);
}
請檢查此以獲取更多詳細信息。
試試這個代碼...
ActionBar actionBar = getSupportActionBar();
if(actionBar!=null){
getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
編輯
按照您的要求,您好像正在使用NoActionBar
主題。.現在在頂部的地圖Activity xml中添加一個工具欄。
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:id="@+id/myAppBar"
app:elevation="0dp"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:contentInsetStart="0dp"
app:popupTheme="@style/AppTheme.PopupOverlay"/>
</android.support.design.widget.AppBarLayout>
並在Java代碼中添加
Toolbar toolbar=(Toolbar)findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
if(getSupportActionBar!=null){
getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
將此添加到您的styles.xml
<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar"/>
<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Dark" />
嘗試這個 :
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
要么
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setDisplayShowHomeEnabled(true);
getActionBar().setHomeButtonEnabled(true);
您正在使用主題: Theme.AppCompat.Light.NoActionBar
和ActionBar
。 我認為這就是該錯誤的原因。 如果您正在使用:
ActionBar actionBar = getActionBar();
然后,使用Theme.AppCompat.Light.DarkActionBar
。
此外,如果要使用: Theme.AppCompat.Light.NoActionBar
。 然后,您必須聲明:
ActionBar actionBar = getSupportActionBar();
您還可以通過布局結構在ToolBar
欄中使用后退圖標。
在您的布局文件中,例如: activity_main
:
<RelativeLayout 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"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.wolfmatrix.dummy.MainActivity">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbarId"
android:layout_width="match_parent"
android:layout_height="48dp"
android:background="@color/colorPrimary">
<TextView
android:id="@+id/toolbarTextId"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:textColor="@android:color/white"
android:textSize="14sp" />
</android.support.v7.widget.Toolbar>
<ImageButton
android:id="@+id/backButtonIcon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@color/colorPrimary"
android:gravity="left"
android:padding="10dp"
app:srcCompat="@drawable/ic_arrow_back_black_24dp" />
</RelativeLayout>
在styles.xml
:使用theme => Theme.AppCompat.Light.NoActionBar
您正在使用AppCompatActivity,因此請嘗試ActionBar actionBar = getSupportedActionBar();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.