/ / Perché View.Gone non funziona in Snackbar? - Android, snackbar

Perché View.Gone non funziona in Snackbar? - Android, snackbar

Ho uno snack bar in cui voglio rimuovere textview ma quando sto usando View.INVISIBLE quindi non sta visualizzando, ma quando si usa View.GONE l'app si blocca dicendo NullPointerException. Perchè così?

Ecco il codice

MainActivity.java

Snackbar sk=Snackbar.make(findViewById(R.id.ll),"It is checked",Snackbar.LENGTH_INDEFINITE);
sk.setAction("Undo",m);
sk.setActionTextColor(Color.GREEN);

Snackbar.SnackbarLayout sl = (Snackbar.SnackbarLayout) sk.getView();

TextView t=sl.findViewById(android.support.design.R.id.snackbar_text);
t.setVisibility(View.GONE);

logcat

ECCEZIONE FATALE: principale Processo: com.example.ankit.test, PID: 29950 java.lang.NullPointerException: tentativo di richiamare il metodo virtuale "int android.text.Layout.getLineCount ()" su un oggetto nullo di riferimento su android.support.design.internal.SnackbarContentLayout.onMeasure (SnackbarContentLayout.java:85) su android.view.View.measure (View.java:18820) su android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:5961) su android.widget.FrameLayout.onMeasure (FrameLayout.java:194) su android.support.design.widget.Snackbar $ SnackbarLayout.onMeasure (Snackbar.java:335) su android.view.View.measure (View.java:18820) su android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:5961) su android.widget.FrameLayout.onMeasure (FrameLayout.java:194) su android.support.v7.widget.ContentFrameLayout.onMeasure (ContentFrameLayout.java:139) su android.view.View.measure (View.java:18820) su android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:5961) su android.support.v7.widget.ActionBarOverlayLayout.onMeasure (ActionBarOverlayLayout.java:391) su android.view.View.measure (View.java:18820) su android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:5961) su android.widget.FrameLayout.onMeasure (FrameLayout.java:194) su android.view.View.measure (View.java:18820) su android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:5961) su android.widget.LinearLayout.measureChildBeforeLayout (LinearLayout.java:1465) su android.widget.LinearLayout.measureVertical (LinearLayout.java:748) su android.widget.LinearLayout.onMeasure (LinearLayout.java:630) su android.view.View.measure (View.java:18820) su android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:5961) su android.widget.FrameLayout.onMeasure (FrameLayout.java:194) a com.android.internal.policy.PhoneWindow $ DecorView.onMeasure (PhoneWindow.java:2680) su android.view.View.measure (View.java:18820) su android.view.ViewRootImpl.performMeasure (ViewRootImpl.java:2132) su android.view.ViewRootImpl.measureHierarchy (ViewRootImpl.java:1248) su android.view.ViewRootImpl.performTraversals (ViewRootImpl.java:1484) su android.view.ViewRootImpl.doTraversal (ViewRootImpl.java:1139) su android.view.ViewRootImpl $ TraversalRunnable.run (ViewRootImpl.java:6091) su android.view.Choreographer $ CallbackRecord.run (Choreographer.java:858) su android.view.Choreographer.doCallbacks (Choreographer.java:670) su android.view.Choreographer.doFrame (Choreographer.java:606) su android.view.Choreographer $ FrameDisplayEventReceiver.run (Choreographer.java:844) su android.os.Handler.handleCallback (Handler.java:739) su android.os.Handler.dispatchMessage (Handler.java:95) su android.os.Looper.loop (Looper.java:148) su android.app.ActivityThread.main (ActivityThread.java:5437) a java.lang.reflect.Method.invoke (metodo nativo) a com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:726) su com.android.internal.os.ZygoteInit.main (ZygoteInit.java:616)

risposte:

0 per risposta № 1

prova prima a creare lo Snackbar in questo modo

 // Create the Snackbar
Snackbar snackbar = Snackbar.make(containerLayout, "", Snackbar.LENGTH_LONG);

Ottieni la vista del layout dello Snackbar

 Snackbar.SnackbarLayout layout = (Snackbar.SnackbarLayout) snackbar.getView();

Nascondi il testo di snackbar in questo modo

 TextView textView = (TextView) layout.findViewById(android.support.design.R.id.snackbar_text);
textView.setVisibility(View.INVISIBLE);

imposta il testo a snackbar come questo

TextView textViewTop = (TextView)
snackView.findViewById(R.id.text);
textViewTop.setText(text);

Aggiungi la vista al layout di Snackbar

layout.addView(snackView, 0);

Mostra lo Snackbar

snackbar.show();