ActionBar-Item wird erst nach Auswahl eines ListView-Eintrags sichtbar

  • Antworten:16
  • OffenNicht stickyNicht beantwortet
  • Forum-Beiträge: 213

27.02.2018, 15:51:46 via Website

Ein item innerhalb einer ActionBar habe ich so gekennzeichnet, dass es immer angezeigt werden soll. Man beachte das letzte showAsAction-Attribut:

<item
        android:id="@+id/cab_add"
        android:icon="@android:drawable/ic_menu_add"
        android:title="@string/cab_add"
        app:showAsAction="always" />

Leider tut es das nicht. Ich vermute, dass die ActionBar erst dann sich selbst und ihre items überhaupt (ob sichtbar oder nicht) anzeigt, wenn in der dazugehörigen ListView ein oder mehrere Einträge ausgewählt werden (die Checkbox mindestens einer ListView-Zeile wird aktiviert).

Also müßte die ActionBar wohl erst durch Markieren mindestens eines ListView-Elements aktiviert werden?

Mein Ziel war es eigentlich dauerhaft ein Symbol im oberen Bildschirm zu sehen. Wenn ich also Recht hätte, müßte ich dafür sorgen, dass die ActionBar immer sichtbar (oder aktiviert) ist?

Vielleicht versteht mich ja einer :).

— geändert am 27.02.2018, 15:56:30

Diskutiere mit!
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.177

27.02.2018, 16:06:12 via Website

Das kommt darauf an ob du die AppCompat v7 nutzt also eine AppCompatActivity oder nciht:
https://stackoverflow.com/questions/23230939/items-not-showing-in-the-actionbar-with-showasaction-always

Zudem: Nutzt du eine Toolbar oder ActionBar?

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 213

27.02.2018, 16:18:45 via Website

import android.support.v7.app.AppCompatActivity;
...
public class MainActivity extends AppCompatActivity

Also benutze ich wohl eine ActionBar oder?

— geändert am 27.02.2018, 16:19:33

Hilfreich?
Diskutiere mit!
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.177

27.02.2018, 16:21:12 via Website

Nö muss nicht sein.
In einer AppCompatActivity kannst ud auch eine Toolbar erstellen.
Aber hast du dir meinen Link angeschaut:

try android:showAsAction instead of app:showAsAction. Or if you're using the appcompat_v7 backport, use both android:showAsAction and app:showAsAction(Thanks to Commonsware).

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 213

27.02.2018, 16:21:51 via Website

Und hiermit leite ich meine xml-Datei ein:

xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">

Den app-Namensraum mußte ich nachträglich einfügen für die showAsAction-Sache.

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 213

27.02.2018, 16:29:11 via Website

Jaja, hab ich gemacht, wie ich eben sagte.

android:showAsAction="always" />

ging nicht. Also mußte ich

app:showAsAction="always" />

zusätzlich einfügen (und das falsche android:showAsAction natürlich löschen), damit der richtige Namensraum angesprochen wird.

Wie gesagt: ich glaube, dass die ActionBar erst sichtbar wird mit allen ihren sichtbaren und unsichtbaren Items, wenn ich sie aktiviere. Und das geschieht bei mir wohl erst, wenn ich auf mindestens ein ListView-Element lange drücke (-> Häkchen in der jeweiligen Checkbox der ListViewZeile).

Ich bin gleich für ein paar Stunden weg. Erst mal Danke an Dich, Pascal!!

Ich muss mir wohl auch noch mal genauer Deinen Link durchlesen.

— geändert am 27.02.2018, 16:32:08

Hilfreich?
Diskutiere mit!
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.177

27.02.2018, 16:31:23 via Website

Ähm ich glaube wir reden ananeander vorbei.
Poste mal einen Screenshot und eine Beschreibung was du genau willst.
Eine ActionBar hat mit einer ListView erstmal nichts zutun.

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 213

27.02.2018, 16:33:52 via Website

Ach ja, jetzt sehe ich auch doch noch INVALID-Attribut bei diesen showAsAction-Attributen.

Später mehr :-).

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 213

27.02.2018, 19:02:58 via Website

Habe inzwischen festgestellt, dass es sich um eine Contextual Action Bar handelt, die sich über die normale Action Bar legt. Also werde ich die erstere links liegen lassen und mich auf das Hinzufügen eines neuen Items in die normale ActionBar konzentrieren.

Das kann ja wohl nicht so schwer sein ;-).

— geändert am 27.02.2018, 19:03:26

Hilfreich?
Diskutiere mit!
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.177

27.02.2018, 20:06:28 via App

Das sollte ja dann mit deiner Methode funktionieren.
Ich habe das genauso mit der ActionBar und Toolbar gemacht.

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 213

28.02.2018, 10:42:57 via Website

Es ist mal wieder mühseliger als gedacht ;-).

Aktuelle Problemlage:

Ich habe also eine ActionBar, verwende aber eine MainActivity, die sich von AppCompatActivity ableitet:

public class MainActivity extends AppCompatActivity {

Nach meinen rudimentären Kenntnissen müßte man aber, um auf die ActionBar zuzugreifen, die zu überschreibenden Methoden onCreateOptionsMenu und onOptionsItemSelected implementieren (siehe Code unten). Dies sind aber Methoden, die die Klasse Fragment vorraussetzen.

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.menu_listfragment, menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
...    

}

Ich vermute, dass ein Umschreiben meiner App von AppCompatActivity auf Fragment wieder tausend andere Fehler verursacht und würde lieber einen leichteren Weg wissen. Vielleicht habt Ihr Profis ja eine Idee?

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 2.902

28.02.2018, 10:47:27 via Website

Vielleicht habt Ihr Profis ja eine Idee

Wir sind alle Profis - besonders Pascal :-)

Nur so ein Tip am Rande : Bevor ich vorgefertigte UI Elemente mühsam umbastel und mir den
entsprechenden Source "reinziehe", bastel ich mir alles schnell selbst.

In deinem Falle : Fullscreen, einen View als Balken oben hin , schöne Bedienelemente rein und fertig ist das Ganze.

Liebe Grüße - Stefan
[ App - Entwicklung ]

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 213

28.02.2018, 10:55:47 via Website

Nur so ein Tip am Rande : Bevor ich vorgefertigte UI Elemente mühsam
umbastel und mir den entsprechenden Source "reinziehe", bastel ich
mir alles schnell selbst.

In deinem Falle : Fullscreen, einen View als Balken oben hin , schöne
Bedienelemente rein und fertig ist das Ganze.

Diese Vorgehensweise finde ich eigentlich ganz gut. Als noch Lernender finde ich es aber manchmal auch ganz ratsam, sich zunächst mal an Vorbildern oder Standards, Standardelementen etc. zu orientieren.

Ich habe zur Zeit ja auch einen Button auf der Oberfläche, der dies leistet, was ich eigentlich als Icon in die ActionBar auslagern möchte. Ich fände es einfach blöd, wenn ich den Platz der ActionBar verschwende (ca. einen Zentimeter hoch). Oder kann ich die eventuell ausblenden?

Eine andere Lösung, die mir eben einfiehl:
Ich habe ja eine gut funktionierende Contextual Action Bar. Leider wird die ja erst sichtbar, wenn ich eine mit ihr verknüpfte ListView benutze (per Markieren eines oder mehrerer ListViewZeilen (deren jeweilige Checkbox erhält dann ein Häkchen).

Vielleicht kann ich eine Möglichkeit finden, die Contextual Action Bar dauerhaft sichtbar zu lassen. Dann wäre sie quasi unabhängig von der ListView und wie eine richtige fixe ActionBar, die man immer sieht.

An die Stärke und Hilfsbereitschaft von Pascal erinnere ich mich noch gut, als ich vor 1,5 Jahren hier war :-).

— geändert am 28.02.2018, 10:57:45

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 213

28.02.2018, 11:01:09 via Website

Aber es ist ja unlogisch. Ein Kontextmenü öffnet sich ja eben erst nach Anwahl eines Objekts und ist nicht dauerhaft zu sehen ;-).

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 2.902

28.02.2018, 11:02:56 via Website

Du hast wahrscheinlich schon festgestellt, dass die Antworten zu deinem Thema recht "wage" sind.
(Auch von mir)

Ich beschäftige mich eher selten mit den vom SDK vorgegebenen Layouts, deshalb kommt von mir auch nichts "Schlaues" herüber - genau so , wie von den Anderen.

Ich benutze das nur , wenn ein Kunde mal was "Schnelles" haben will , Customized Anpassungen werden
dann abgelehnt und gegen Aufpreis die obere Variante umgesetzt.

Dann hat er aber das , was er mag :-)

— geändert am 28.02.2018, 11:13:08

Liebe Grüße - Stefan
[ App - Entwicklung ]

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 213

28.02.2018, 11:25:42 via Website

Danke für Deine Offenheit, Stefan :).

Ich bin ja eigentlich ein Freund von Normen und Standards ;-).

Hilfreich?
Diskutiere mit!
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.177

28.02.2018, 11:35:23 via App

Hallo Frank,
wenn du es nach Google Standards ab Material richtig machen willst, dann nutze die Toolbar, damit funktioniert es sicher:

https://guides.codepath.com/android/using-the-app-toolbar

Ich habe mir vor einiger Zeit mal selber so einen "Adapter" geschrieben, der jedes Activity Layout nimmt und es mit Toolbar oder Drawer zusammen anzeigt.
Darin findest du zur Toolbar ein Layout Beispiel.

https://github.com/PlPt/MaterialAdapter

Kannst das auch benutzen wenn du willst, allerdings gibt es kein Jcenter dazu, du müsstest das Projekt also als Modul laden ind einbinden.

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Diskutiere mit!

Empfohlene Artikel