Versuchen Sie, das Verhalten von BottomSheet in der Android-Support-Bibliothek zu verstehen 23.2.1

8

Ich versuche, Bottom Sheet in einer meiner Aktivitäten zu implementieren, und ich bin irgendwie verwirrt durch die Art, wie es sich benimmt!

Also hier ist das Problem, ich habe eine Aktivität, in der ich versuche, Bottom-Blatt zu zeigen, und ich sehe das:

  1. Wenn wir die Eigenschaft app:behavior_peekHeight nicht setzen, funktioniert das untere Blatt nie

  2. Wenn Sie die PeekHeight auf etwas unter 30dp setzen (im Grunde nur, um sie vor dem Bildschirm zu verbergen)

  3. Wenn Sie app:behavior_peekHeight auf mehr als 30dp in der Layoutdatei setzen und versuchen, den Status von bottomSheetBehavior auf STATE_HIDDEN in Ihrer OnCreate-Methode festzulegen, stürzt Ihre App mit diesem Fehler ab

verursacht durch:

%Vor%

Ich bin wirklich verwirrt darüber, warum es mir nicht erlaubt ist, es in onCreate zu verstecken? oder warum können wir peekHeight nicht auf 0 setzen, so dass es auf dem Bildschirm nicht sichtbar ist, wenn wir nicht die STATE_EXPANDED aufrufen oder gar nicht, dass diese Eigenschaft standardmäßig ausgeblendet werden soll! oder zumindest sollte ich in der Lage sein, es in meinem onCreate versteckt zu setzen!

Vermisse ich etwas? Oder ist das Verhalten der BottomSheet starr?

Meine Layoutdatei für das BottomSheet ist ungefähr so:

%Vor%

In meiner Tätigkeit mache ich so etwas:

%Vor%

In meinem Onclick mache ich das:

%Vor%     
sujay 20.03.2016, 05:54
quelle

4 Antworten

4

Nachdem ich einige Tage an diesem Problem gearbeitet habe, habe ich eine alternative Lösung gefunden:

Anstatt das Bottom_sheet direkt in Ihrem Layout zu verwenden, wird dieses Problem nicht auftreten, wenn wir ein Bottom_Sheet-Fragment erstellen und es dann in der Aktivität instanziieren. Das untere Blatt wird ausgeblendet, und wir müssen peek_height nicht angeben

hier ist was ich gemacht habe

%Vor%

Dann in meiner Tätigkeit

%Vor%

Das hat mein Problem gelöst, dass das untere Blatt nicht versteckt ist, wenn die Aktivität startet, aber ich bin immer noch nicht in der Lage zu verstehen, warum, wenn bottom_sheet direkt eingeschlossen ist, wir dieses Problem haben!

    
sujay 21.03.2016, 20:53
quelle
1

Der Grund für den Absturz liegt in der Tatsache, dass die schwache Referenz erst in einer der letzten Zeilen in onLayoutChild gesetzt wird, die Ihnen die Ausnahme null ptr gibt.

Sie können ein benutzerdefiniertes BottomSheet-Verhalten erstellen und onLayoutChild überschreiben, indem Sie dort den erweiterten Status festlegen.

Ein Beispiel finden Sie hier: NullPointerExeption mit AppCompat BottomSheets

    
12vi6 20.03.2016 18:50
quelle
1

(Bezug nehmend auf die Frage) Das Problem mit Ihrem Code besteht darin, dass Sie versuchen, die setState-Methode direkt in onCreate aufzurufen. Dies wird einen NullPointer werfen, da die WeakReference noch nicht initialisiert ist. Es wird initialisiert, wenn das Coordinator-Layout seine Kindansicht legt.

  

onLayoutChild (CoordinatorLayout übergeordnet, V untergeordnet, int layoutDirection)

     

Wird aufgerufen, wenn das übergeordnete CoordinatorLayout über das Layout verfügt   gegebene Kindansicht.

Der beste Ansatz ist also, die Peek-Höhe auf 0 zu setzen und innerhalb des onItemClick-Listeners ein- / auszublenden. Hier ist mein Code:

bottom_sheet.xml

%Vor%

activity_main.xml

%Vor%

MainActivity.java

%Vor%

Hier ist zunächst das untere Blatt nicht sichtbar. Beim Klicken auf den Button wird der Status STATE_COLLAPSED / STATE_EXPANDED gesetzt.

Das Tutorial, dem ich gefolgt bin, um diese Demo-App zu erstellen, ist unten aufgeführt: Bottom Sheet mit Android Design Unterstützungsbibliothek

    
Rohit Ramkumar 26.03.2016 14:55
quelle
1

Um die Null-Zeiger-Ausnahme zu vermeiden, setzen Sie den Zustand in onCreate () auf

%Vor%     
iam thadiyan 07.04.2016 18:00
quelle