31

भीतर काम नहीं कर रहा मैं Snackbar दृश्य दिखाने के लिए जब मैं बटन पर क्लिक करें कोशिश कर रहा हूँ, लेकिन यह जब मैं मैं नीचे टुकड़ा वर्ग और भी त्रुटि लॉग को परिभाषित है बटनSnackbar टुकड़ा वर्ग

पर क्लिक करीब त्रुटि मजबूर पता चलता है।

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> 

यह snackbar नहीं दिखा रहा है जब मैं बटन दबाएं

मैं टुकड़ा वर्ग की है। यह नीचे त्रुटि लॉग देता है:

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) 

मैं इस त्रुटि को कैसे हल कर सकता हूं?

+0

आप इसे करने की कोशिश है पहले पैरामीटर के रूप '' बजाय getView' की v' पास करके? –

+0

वी क्या है? मैंने 'getView' के बजाय' view' पास करके कोशिश की है लेकिन यह काम नहीं कर रहा है। एक ही त्रुटि – deepak

+0

मतलब 'ऑनक्लिक (देखें v)' विधि पैरामीटर –

उत्तर

22

मैं इस समाधान कर लिया है:

यह ठीक है अगर हम अपना fragment_home.xml

समाधान करने के लिए CoordinatedLayout शामिल न करें:

0,123,

परिभाषित: निजी सापेक्ष Layout mRoot;

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

इस बारे में अब मुख्य बात है:

सिर्फ Theme.AppCompat.Light.NoActionBar

को वर्तमान विषय बदलने

अब initUI(View view)

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

में और बटन क्लिक करें घटना पर प्रारंभ निम्नलिखित कोड डालें

यह हो गया !!! !!!

+14

यदि कोई और स्नैक्सबार नहीं दिखा रहा है, तो जांचें कि आपने इसके बाद '.show()' विधि लिखा है! यह बेवकूफ है, लेकिन यह मेरे लिए मामला था – Nexen

+0

@Nexen मैं तुमसे प्यार करता हूँ। और हाँ, यह बेवकूफ है लेकिन मेरे लिए एक महीने में दो बार हुआ है। – saiyancoder

+0

यह समाधान लेआउट – Choletski

3

Snackbar make विधि एक दृष्टिकोण लेता है और उस दृश्य से यह जब तक यह दिखाने के लिए एक उपयुक्त लेआउट पाता पदानुक्रम अप ट्रेल्स, यदि आप एक अपवाद था यह है कि आप अपने प्रोजेक्ट को CoordinatedLayout नहीं जोड़ा था, इसका मतलब है

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; 
    } 
+0

तो मुझे बस इस कोड को वर्तमान में लिखना है खंड वर्ग? – deepak

+1

और यदि मैं समन्वित LAYout जोड़ना नहीं चाहता हूं तो क्या होगा? – deepak

+0

नहीं, यह स्नैकबार में बनाया गया है, आप शायद अपनी निर्भरताओं में कुछ नहीं जोड़ रहे हैं – thepoosh

36

तुम भी उपयोग कर सकते हैं:

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

इस तरह:

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

देखें this

+1

ओह मैन पॉप अप नहीं करता है! आपने _huge_ विनाश से अपना पूरा __Clan__ बचाया है, अंत में आपका उत्तर –

+1

धन्यवाद करता है धन्यवाद, इससे मुझे – MinMaxUz

+0

@ojonugwaochalifu में मदद मिली है, मैं एक समान दृष्टिकोण का उपयोग कर रहा हूं। लेकिन यह मुझे त्रुटि देता है। 'विधि प्राप्त नहीं कर सकता सक्रियता()' क्यों? – Omid1989

संबंधित मुद्दे