簡體   English   中英

Android-MapsActivity標題欄中的“后退”按鈕

[英]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.NoActionBarActionBar 我認為這就是該錯誤的原因。 如果您正在使用:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM