support studio implement custom android android-fragments android-activity android-design-library android-snackbar

android - studio - Snackbar no está funcionando dentro de la clase de fragmento



snackbar android (3)

He resuelto esto:

Está bien si no incluimos CoordinatedLayout en mi fragment_home.xml

Solución:

Definido: RelativeLayout privado mRoot;

Ahora inicializar en initUI(View view)

mRoot = (RelativeLayout) view.findViewById(R.id.mainrl);

y en el evento Click del botón, coloque el siguiente código:

Snackbar.make(mRoot, "Had a snack at Snackbar", Snackbar.LENGTH_LONG).show();

Ahora, lo principal de esto es:

simplemente cambie el tema actual a Theme.AppCompat.Light.NoActionBar

Está hecho.!!!

Intento mostrar la vista de la barra de aperitivos cuando hago clic en el botón, pero muestra un error de cierre de fuerza cuando hago clic en el botón

Tengo definir la clase de fragmento a continuación y también el registro de errores.

Tengo clase de fragmento:

public class HomeFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_home, container, false); context = getActivity(); initUI(rootView); return rootView; } private void initUI(View view) { btn= (Button) view.findViewById(R.id.btnpress); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Snackbar.make(getView(),"SnackBAr Test" , Snackbar.LENGTH_LONG).show(); } }); }

fragment_home.xml :

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:id="@+id/mainrl" android:layout_height="match_parent"> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:orientation="horizontal" android:paddingBottom="40dp" > <Button android:id="@+id/btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:Text="PLEASE PRESS" /> </LinearLayout> </RelativeLayout>

Cuando presiono el botón, no se muestra la snackbar . da el siguiente registro de error:

java.lang.NoClassDefFoundError: android.support.design.widget.CoordinatorLayout at android.support.design.widget.Snackbar.findSuitableParent(Snackbar.java:237) at android.support.design.widget.Snackbar.make(Snackbar.java:206) at com.example.test.fragment.HomeFragment$3.onLeftCardExit(HomeFragment.java:168) at android.view.ViewPropertyAnimator$AnimatorEventListener.onAnimationEnd(ViewPropertyAnimator.java:1030) at android.animation.ValueAnimator.endAnimation(ValueAnimator.java:1056) at android.animation.ValueAnimator.access$400(ValueAnimator.java:50) at android.animation.ValueAnimator$AnimationHandler.doAnimationFrame(ValueAnimator.java:644) at android.animation.ValueAnimator$AnimationHandler.run(ValueAnimator.java:660) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:788) at android.view.Choreographer.doCallbacks(Choreographer.java:591) at android.view.Choreographer.doFrame(Choreographer.java:559) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:774) at android.os.Handler.handleCallback(Handler.java:808) at android.os.Handler.dispatchMessage(Handler.java:103) at android.os.Looper.loop(Looper.java:193) at android.app.ActivityThread.main(ActivityThread.java:5333) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:824) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:640) at dalvik.system.NativeStart.main(Native Method)

¿Cómo puedo resolver este error?


SnackBar make method toma una vista y desde esa vista recorre la jerarquía hasta que encuentra un diseño adecuado para mostrar, si tuvo una excepción, esto significa que no agregó CoordinatedLayout a su proyecto

private static ViewGroup findSuitableParent(View view) { ViewGroup fallback = null; do { if(view instanceof CoordinatorLayout) { return (ViewGroup)view; } if(view instanceof FrameLayout) { // android.R.id.content if(view.getId() == 16908290) { return (ViewGroup)view; } fallback = (ViewGroup)view; } if(view != null) { ViewParent parent = view.getParent(); view = parent instanceof View?(View)parent:null; } } while(view != null); return fallback; }


También puedes usar:

getActivity().findViewById(android.R.id.content)

Me gusta esto:

Snackbar.make(getActivity().findViewById(android.R.id.content), "Look at me, I''m a fancy snackbar", Snackbar.LENGTH_LONG).show();

Mira this