it-swarm.com.de

Wie implementiere ich die Android ActionBar-Schaltfläche?

Ich habe eine Aktivität mit einer Listenansicht. Wenn der Benutzer auf das Element klickt, wird das Element "Viewer" geöffnet:

List1.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {

        Intent nextScreen = new Intent(context,ServicesViewActivity.class);
        String[] Service = (String[])List1.getItemAtPosition(arg2);

        //Sending data to another Activity
        nextScreen.putExtra("data", datainfo);
        startActivityForResult(nextScreen,0);
        overridePendingTransition(R.anim.right_enter, R.anim.left_exit);
    }
});

Dies funktioniert gut, aber auf der Aktionsleiste wird der Pfeil neben dem App-Symbol nicht aktiviert. Fehlt mir etwas?

110
Joaolvcm

Selvin hat schon die richtige Antwort gepostet, hier ist nur die Lösung in schönem Code ;-)

public class ServicesViewActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // etc...
        getActionBar().setDisplayHomeAsUpEnabled(true);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case Android.R.id.home:
            NavUtils.navigateUpFromSameTask(this);
            return true;
        default:
            return super.onOptionsItemSelected(item);
        }
    }
}

Für die Funktion NavUtils.navigateUpFromSameTask(this) müssen Sie die übergeordnete Aktivität in der Datei AndroidManifest.xml definieren

    <activity Android:name="com.example.ServicesViewActivity" >
            <meta-data
            Android:name="Android.support.PARENT_ACTIVITY"
            Android:value="com.example.ParentActivity" />
    </activity>

http://developer.Android.com/design/patterns/navigation.html#up-vs-back

232
surffan

Stellen Sie sicher, dass die HomeButton-Schaltfläche der ActionBar in der Aktivität aktiviert ist:

Android, API 5+:

@Override
public void onBackPressed() {
     ...
     super.onBackPressed();
}

ActionBarSherlock und App-Compat, API 7+:

@Override
public void onCreate(Bundle savedInstanceState) {
    ...
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}

Android, API 11+:

@Override
public void onCreate(Bundle savedInstanceState) {
    ...
    getActionBar().setDisplayHomeAsUpEnabled(true);
}

Beispiel MainActivity, das ActionBarActivity erweitert:

public class MainActivity extends ActionBarActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Back button
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case Android.R.id.home: 
            // API 5+ solution
            onBackPressed();
            return true;

        default:
            return super.onOptionsItemSelected(item);
        }
    }
}

Auf diese Weise können alle Aktivitäten, die Sie möchten, den Gegendruck haben.

Android, API 16+:

http://developer.Android.com/training/implementing-navigation/ancestral.html

AndroidManifest.xml:

<application ... >
    ...
    <!-- The main/home activity (it has no parent activity) -->
    <activity
        Android:name="com.example.myfirstapp.MainActivity" ...>
        ...
    </activity>
    <!-- A child of the main activity -->
    <activity
        Android:name="com.example.myfirstapp.DisplayMessageActivity"
        Android:label="@string/title_activity_display_message"
        Android:parentActivityName="com.example.myfirstapp.MainActivity" >
        <!-- The meta-data element is needed for versions lower than 4.1 -->
        <meta-data
            Android:name="Android.support.PARENT_ACTIVITY"
            Android:value="com.example.myfirstapp.MainActivity" />
    </activity>
</application>

Beispiel MainActivity, das ActionBarActivity erweitert:

public class MainActivity extends ActionBarActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Back button
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        // Respond to the action bar's Up/Home button
        case Android.R.id.home:
            NavUtils.navigateUpFromSameTask(this);
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}
145
Jared Burrows

Um die ActionBar-Schaltfläche "Zurück" zu aktivieren, benötigen Sie in Ihrer Aktivität offensichtlich eine ActionBar. Dies wird durch das von Ihnen verwendete Design festgelegt. Sie können das Thema für Ihre Aktivität im AndroidManfiest.xml einstellen. Wenn Sie beispielsweise das @Android:style/Theme.NoTitleBar-Design verwenden, haben Sie keine ActionBar. In diesem Fall gibt der Aufruf von getActionBar() null zurück. Stellen Sie also sicher, dass Sie zuerst eine ActionBar haben.

Der nächste Schritt besteht darin, den Android:parentActivityName auf die Aktivität einzustellen, zu der Sie navigieren möchten, wenn Sie die Zurück-Taste drücken. Dies sollte auch im AndroidManfiest.xml erfolgen.

Jetzt können Sie die Zurück-Schaltfläche in der onCreate-Methode Ihrer "Kind" -Aktivität aktivieren.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getActionBar().setDisplayHomeAsUpEnabled(true);
}

Jetzt sollten Sie die Logik für die Zurück-Schaltfläche implementieren. Sie überschreiben einfach die onOptionsItemSelected-Methode in Ihrer "Kind" -Aktivität und überprüfen die ID der Zurück-Schaltfläche, die Android.R.id.home lautet. 

Jetzt können Sie die Methode NavUtils.navigateUpFromSameTask(this);AUSL&OUML;SEN, ABERwenn Sie den Android:parentActivityName nicht in AndroidManfiest.xml angegeben haben, wird dies Ihre App zum Absturz bringen. 

Manchmal ist es das, was Sie möchten, weil es Sie daran erinnert, dass Sie "etwas" vergessen haben. Wenn Sie dies jedoch verhindern möchten, können Sie mithilfe der getParentActivityIntent()-Methode überprüfen, ob Ihre Aktivität ein übergeordnetes Element enthält. Wenn dies null zurückgibt, haben Sie das übergeordnete Element nicht angegeben.

In diesem Fall können Sie die onBackPressed()-Methode auslösen, die im Grunde dasselbe tut, als würde der Benutzer die Zurück-Taste am Gerät drücken. Eine gute Implementierung, die niemals Ihre App zum Absturz bringen würde 

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case Android.R.id.home:
            if (getParentActivityIntent() == null) {
                Log.i(TAG, "You have forgotten to specify the parentActivityName in the AndroidManifest!");
                onBackPressed();
            } else {
                NavUtils.navigateUpFromSameTask(this);
            }
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

Bitte beachten Sie, dass die Animation, die der Benutzer sieht, sich zwischen NavUtils.navigateUpFromSameTask(this); und onBackPressed() unterscheidet.

Es liegt an Ihnen, welchen Weg Sie nehmen, aber ich fand die Lösung hilfreich, vor allem wenn Sie eine Basisklasse für alle Ihre Aktivitäten verwenden.

13
dknaack

AndroidManifest-Datei:

    <activity Android:name=".activity.DetailsActivity">
        <meta-data
            Android:name="Android.support.PARENT_ACTIVITY"
            Android:value="br.com.halyson.materialdesign.activity.HomeActivity" />
    </activity>

in DetailsActivity hinzufügen:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);   
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}

es ist Arbeit :]

8

Android-Anmerkungen:

@OptionsItem(Android.R.id.home)
void homeSelected() {
    onBackPressed();
}

Quelle: https://github.com/excilys/androidannotations

7
ldd

Ich denke, onSupportNavigateUp() ist der einfachste und beste Weg, dies zu tun

Überprüfen Sie den Code in diesem Link Klicken Sie hier für den vollständigen Code

4

https://stackoverflow.com/a/46903870/4489222

Um dies zu erreichen, gibt es einfach zwei Schritte:

Schritt 1: Gehen Sie zu AndroidManifest.xml und fügen Sie den Parameter im Tag - Android hinzu: parentActivityName = ". Home.HomeActivity".

beispiel:

 <activity
    Android:name=".home.ActivityDetail"
    Android:parentActivityName=".home.HomeActivity"
    Android:screenOrientation="portrait" />

Schritt 2: Fügen Sie in ActivityDetail Ihre Aktion für vorherige Seite/Aktivität hinzu

beispiel:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
   switch (item.getItemId()) {
      case Android.R.id.home: 
          onBackPressed();
          return true;
   }
   return super.onOptionsItemSelected(item);}
}
2
Vivek Hande

Wenn Sie die Symbolleiste verwenden, hatte ich das gleiche Problem. Ich habe das gelöst, indem ich diese beiden Schritte befolgt habe

  1. In der AndroidManifest.xml
<activity Android:name=".activity.SecondActivity" Android:parentActivityName=".activity.MainActivity"/>
  1. Fügen Sie in der SecondActivity diese hinzu ...
Toolbar toolbar = findViewById(R.id.second_toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayShowTitleEnabled(false);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
1
user2823506

Fügen Sie in der OnCreate-Methode Folgendes hinzu:

if (getSupportActionBar() != null)
    {
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    }

Dann füge diese Methode hinzu:

@Override
public boolean onSupportNavigateUp() {
    onBackPressed();
    return true;
}
1
Marco Concas
getSupportActionBar().setDisplayHomeAsUpEnabled(true);

in onCreated Methode für die neue apis.

1
Kartik Garasia

Die folgenden Schritte reichen aus, um die Taste zu drücken:

Schritt 1: Dieser Code sollte in Manifest.xml enthalten sein 

<activity Android:name=".activity.ChildActivity"
        Android:parentActivityName=".activity.ParentActivity"
        Android:screenOrientation="portrait">
        <meta-data
            Android:name="Android.support.PARENT_ACTIVITY"
            Android:value=".activity.ParentActivity" /></activity>

Schritt 2: Sie geben nicht 

finish();

in Ihrer Elternaktivität, während Sie die Kinderaktivität starten.

Schritt 3: Wenn Sie von der untergeordneten Aktivität zur übergeordneten Aktivität zurückkehren müssen, geben Sie diesen Code für die untergeordnete Aktivität ein.

startActivity(new Intent(ParentActivity.this, ChildActivity.class));
0
Kumar VL