[Tip] Fake-"Tabs" in Actionbar

solaris63

solaris63

Dauergast
305
Wenn man eine Actionbar hat, und aus welchen Gründen auch immer keine Tabs benutzen möchte (ich hab meine Grüne :smile:), vor ein paar Tagen fiel mir ne gute Idee ein:

Ich habe diese Actionbar gehabt:
Code:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item 
        android:id="@+id/menu_settings"
        android:orderInCategory="100"
        android:showAsAction="never" />
    <item 
        android:id="@+id/maths"
        android:title="@string/maths"
        android:orderInCategory="1"
        android:showAsAction="always|withText" 
        android:titleCondensed="@string/maths" 
        android:icon="@drawable/ic_action_calculator" /> 
    <item 
        android:id="@+id/physics"
        android:icon="@drawable/ic_action_line_chart"
        android:title="@string/physics"
        android:orderInCategory="2"
        android:showAsAction="always|withText"/>
</menu>

Wie man sieht, fügt sie 2 (noja eigentlich 3 :smile:) "Menüpunkte" hinzu: Mathematik und Physik.
In der anderen .java steht dann diese Code:
Code:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_home, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.maths:
            return true;
        case R.id.physics:
            Intent myIntent2 = new Intent(Home.this, ActivityPhysics.class);
            startActivity(myIntent2);
        default:
            return super.onOptionsItemSelected(item);
    }
}
Also falls man auf Mathematik drückt, wird einfach garnix gemacht, wenn man auf Physik drückt, wird eine zweite Activity gestartet.
In der zweiten Activity ist dann dieser Code, der dafür sorgt, dass wenn man auf Physik drückt, nichts geschieht (bzw. ein leckerer Toast wird gebacken :scared:), aber wenn man auf Mathematik drückt, wird Mathematik geöffnet:
Code:
@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		switch (item.getItemId()) {
			case R.id.maths:
				Intent myIntent2 = new Intent(Home.this, ActivityPhysics.class);
                                startActivity(myIntent2);
                                return true;
			case R.id.physics:
				Toast.makeText(getApplicationContext(), "Du bist bereits bei Physik :)", Toast.LENGTH_SHORT).show();
				return true;
			default:
				return super.onOptionsItemSelected(item);
		}
	}
Das Problem war bzw. ist nur, dass wenn man ein paar Mal auf Mathematik, danach auf Physik, danach auf Mathmatik etc. drückt, man beim Drücken auf den "Zurück"-Knopf (hardware, softkeys) dann zurückgeschickt wird..unzwar über alles, was man besucht hat. Also man muss sich dann durch Physik, Mathmatik, Physik, Mathematik etc. zurückkämpfen (gut, fast jeder hat auch einen Home-Knopf, aber dennoch unschön ;)).

Lösung:
Bei den Android Developers have ich einige Stunden, bevor ich das oben beschriebene Problem bemerkt habe, was über die Actionbar gelesen und da stand, dass es einen Befehl gibt, um ein "Up" zu machen, ähnlich wie im Explorer auf dem Computer.
Also wird diese Code den "Physik" Knopf nicht die Mathematik-Activity noch ein Mal öffnen, sondern einfach zurück gehen:
Code:
case R.id.maths:
				/*Intent myIntent2 = new Intent(ActivityPhysics.this, Home.class);
				startActivity(myIntent2);*/
				Intent intent = new Intent(this, Home.class);
                intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(intent);
                return true;

Okay, dieser Tip wird vielleicht 1 millionstel aller Leser hier betreffen, aber solange ich kein eigenes Forum erstellt habe, poste ich das woanders, einfach nur, damit das bei Google gefunden wird ;)
 
  • Danke
Reaktionen: Madlip
Nette Lösung, aber wenn schon Austausch des Content, warum dann nicht lieber ein Fragment?
 
Und warum nimmst du keine richtigen Tabs und löst das über Button?! Wenn ich dich richtig verstanden habe, willst du deine Navigation in die ActionBar ziehen und mit den Menü-Button hin und her wechseln zwischen der Ansicht. Aber dafür sind doch genau Tabs da?!

Dann hast du das Problem mit der Activity auch nicht, weil du einfach Fragments austauscht (wobei du das bei dir auch machen kannst ohne Tabs). Falls du dennoch eine History haben willst, kannst du die Fragmentänderungen in den Backstack hauen.

Hier der Link: Action Bar | Android Developers Mit dem ViewPager aus der Support Library kannst du mit Tabs auch nette Gesten hinzufügen, was es dem Nutzer einfacher macht. All das kann bis Android 2.1 verwendet werden (ActionBarSherlock + Support Library).
 
v Ralle v schrieb:
Und warum nimmst du keine richtigen Tabs und löst das über Button?! Wenn ich dich richtig verstanden habe, willst du deine Navigation in die ActionBar ziehen und mit den Menü-Button hin und her wechseln zwischen der Ansicht. Aber dafür sind doch genau Tabs da?!

Dann hast du das Problem mit der Activity auch nicht, weil du einfach Fragments austauscht (wobei du das bei dir auch machen kannst ohne Tabs). Falls du dennoch eine History haben willst, kannst du die Fragmentänderungen in den Backstack hauen.

Hier der Link: Action Bar | Android Developers Mit dem ViewPager aus der Support Library kannst du mit Tabs auch nette Gesten hinzufügen, was es dem Nutzer einfacher macht. All das kann bis Android 2.1 verwendet werden (ActionBarSherlock + Support Library).

Mir gefiel nicht, dass Tabs eine neue Leiste weg nehmen ;)
Die Actionbar-Buttons sind in die Actionbar eingebaut, also nehmen nicht viel Platz weg :)
 
Das kann ich trotzdem nicht nachvollziehen. Man hätte statt den Standardtabs auch den ViewPagerIndicator nehmen können: ViewPagerIndicator Das nimmt weniger Platz weg. Man kann auch die ActionBar, wenn man nur die Tabs braucht, deaktivieren, das spart auch Platz.

Ich empfehle halt immer das Standardverhalten, wie es Google in seinen Richtlinien empfiehlt. Das erleichtert dem Nutzer die Bedienung über mehrere Apps hinweg.

Das muss jeder natürlich für sich selbst entscheiden, das ist aber meine Herangehensweise.
 
v Ralle v schrieb:
Das kann ich trotzdem nicht nachvollziehen. Man hätte statt den Standardtabs auch den ViewPagerIndicator nehmen können: ViewPagerIndicator Das nimmt weniger Platz weg. Man kann auch die ActionBar, wenn man nur die Tabs braucht, deaktivieren, das spart auch Platz.

Ich empfehle halt immer das Standardverhalten, wie es Google in seinen Richtlinien empfiehlt. Das erleichtert dem Nutzer die Bedienung über mehrere Apps hinweg.

Das muss jeder natürlich für sich selbst entscheiden, das ist aber meine Herangehensweise.

Die Actionbar brauch ich aber die kann ich nich löschen :flapper:
 
ich find es trotzdem gut das sich jemand da mal gedanken macht was eigenes zu entwickeln ...
 

Ähnliche Themen

M
Antworten
0
Aufrufe
1.144
mglinka99
M
D
Antworten
1
Aufrufe
1.564
koje71
koje71
Kiwi++Soft
  • Gesperrt
  • Angepinnt
  • Kiwi++Soft
Antworten
0
Aufrufe
4.889
Kiwi++Soft
Kiwi++Soft
Zurück
Oben Unten