2015-06-03 10 views
18

को भरने में त्रुटि मैं Google द्वारा प्रदान की गई आधिकारिक डिज़ाइन लाइब्रेरी से नया स्नैकबार आज़माकर देखना चाहता था। इसका उपयोग टोस्ट के बहुत करीब है इसलिए मैंने सोचा कि यह कोशिश करने के लिए काफी आसान होगा।एंड्रॉइड स्नैकबार: SnackbarLayout

मैंने 5.1 के साथ-साथ सैमसंग गैलेक्सी एस 6 एज चलाने वाले एमुलेटर पर इसे आजमाया है।

मेरी समस्या यह है कि ऐप क्रैशबार को प्रदर्शित करने के दौरान क्रैश हो जाता है।

कोड

package com.jayway.andreas.test; 

import android.app.Activity; 
import android.os.Bundle; 
import android.support.design.widget.Snackbar; 
import android.view.View; 


public class MainActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     findViewById(R.id.button).setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Snackbar.make(v, R.string.test, Snackbar.LENGTH_LONG) 
         .setAction("Action!", new View.OnClickListener() { 
          @Override 
          public void onClick(View v) { 
           // NOP 
          } 
         }) 
         .show(); 
      } 
     }); 
    } 
} 

लेआउट:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    android:id="@+id/root_layout" 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context=".MainActivity"> 

    <Button 
     android:id="@+id/button" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" 
     android:text="Button"/> 
</RelativeLayout> 

Gradle फ़ाइल

apply plugin: 'com.android.application' 

android { 
    compileSdkVersion 22 
    buildToolsVersion "23.0.0 rc1" 

    defaultConfig { 
     applicationId "com.jayway.andreas.test" 
     minSdkVersion 21 
     targetSdkVersion 22 
     versionCode 1 
     versionName "1.0" 
    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
    compileOptions { 
     sourceCompatibility JavaVersion.VERSION_1_7 
     targetCompatibility JavaVersion.VERSION_1_7 
    } 
} 

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    compile 'com.android.support:design:22.2.0' 
} 

मैं विभिन्न उपलब्ध कराने की कोशिश की है पहले पैरामीटर के रूप विचारों (रूट RelativeLayout, बटन को देखते और खिड़की के सजावट देखें), लेकिन कोई फर्क नहीं पड़ता जो एक मैं मैं अभी भी निम्न स्टैकट्रेस मिल प्रदान की है NT:

android.view.InflateException: Binary XML file line #18: Error inflating class android.support.design.widget.Snackbar$SnackbarLayout 
E/AndroidRuntime(19107): at android.view.LayoutInflater.createView(LayoutInflater.java:640) 
E/AndroidRuntime(19107): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:750) 
E/AndroidRuntime(19107): at android.view.LayoutInflater.inflate(LayoutInflater.java:483) 
E/AndroidRuntime(19107): at android.view.LayoutInflater.inflate(LayoutInflater.java:415) 
E/AndroidRuntime(19107): at android.support.design.widget.Snackbar.<init>(Snackbar.java:119) 
E/AndroidRuntime(19107): at android.support.design.widget.Snackbar.make(Snackbar.java:140) 
E/AndroidRuntime(19107): at android.support.design.widget.Snackbar.make(Snackbar.java:164) 
E/AndroidRuntime(19107): at com.jayway.andreas.test.MainActivitykr8.51onClick(MainActivity.java:20) 
E/AndroidRuntime(19107): at android.view.View.performClick(View.java:5217) 
E/AndroidRuntime(19107): at android.view.View$PerformClick.run(View.java:20983) 
E/AndroidRuntime(19107): at android.os.Handler.handleCallback(Handler.java:739) 
E/AndroidRuntime(19107): at android.os.Handler.dispatchMessage(Handler.java:95) 
E/AndroidRuntime(19107): at android.os.Looper.loop(Looper.java:145) 
E/AndroidRuntime(19107): at android.app.ActivityThread.main(ActivityThread.java:6141) 
E/AndroidRuntime(19107): at java.lang.reflect.Method.invoke(Native Method) 
E/AndroidRuntime(19107): at java.lang.reflect.Method.invoke(Method.java:372) 
E/AndroidRuntime(19107): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399) 
E/AndroidRuntime(19107): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194) 
E/AndroidRuntime(19107): Caused by: java.lang.reflect.InvocationTargetException 
E/AndroidRuntime(19107): at java.lang.reflect.Constructor.newInstance(Native Method) 
E/AndroidRuntime(19107): at java.lang.reflect.Constructor.newInstance(Constructor.java:288) 
E/AndroidRuntime(19107): at android.view.LayoutInflater.createView(LayoutInflater.java:614) 
E/AndroidRuntime(19107): ... 17 more 
E/AndroidRuntime(19107): Caused by: android.view.InflateException: Binary XML file line #34: Error inflating class <unknown> 
E/AndroidRuntime(19107): at android.view.LayoutInflater.createView(LayoutInflater.java:640) 
E/AndroidRuntime(19107): at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:55) 
E/AndroidRuntime(19107): at android.view.LayoutInflater.onCreateView(LayoutInflater.java:689) 
E/AndroidRuntime(19107): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:748) 
E/AndroidRuntime(19107): at android.view.LayoutInflater.rInflate(LayoutInflater.java:813) 
E/AndroidRuntime(19107): at android.view.LayoutInflater.inflate(LayoutInflater.java:480) 
E/AndroidRuntime(19107): at android.view.LayoutInflater.inflate(LayoutInflater.java:415) 
E/AndroidRuntime(19107): at android.view.LayoutInflater.inflate(LayoutInflater.java:366) 
E/AndroidRuntime(19107): at android.support.design.widget.Snackbar$SnackbarLayout.<init>(Snackbar.java:526) 
E/AndroidRuntime(19107): ... 20 more 
E/AndroidRuntime(19107): Caused by: java.lang.reflect.InvocationTargetException 
E/AndroidRuntime(19107): at java.lang.reflect.Constructor.newInstance(Native Method) 
E/AndroidRuntime(19107): at java.lang.reflect.Constructor.newInstance(Constructor.java:288) 
E/AndroidRuntime(19107): at android.view.LayoutInflater.createView(LayoutInflater.java:614) 
E/AndroidRuntime(19107): ... 28 more 
E/AndroidRuntime(19107): Caused by: java.lang.RuntimeException: Failed to resolve attribute at index 13 
E/AndroidRuntime(19107): at android.content.res.TypedArray.getDrawable(TypedArray.java:760) 
E/AndroidRuntime(19107): at android.view.View.<init>(View.java:3990) 
E/AndroidRuntime(19107): at android.widget.TextView.<init>(TextView.java:1021) 
E/AndroidRuntime(19107): at android.widget.TextView.<init>(TextView.java:1016) 
E/AndroidRuntime(19107): at android.widget.TextView.<init>(TextView.java:1012) 
E/AndroidRuntime(19107): ... 31 more 
+0

क्या आपने रूट लेआउट को पहले तर्क के रूप में पारित करने का प्रयास किया है? – Ziem

+0

हां, मैंने रिलेवेटिवआउट में एक आईडी जोड़ा और इसे उसी परिणाम से पास कर दिया। –

+0

@JaredBurrows लेआउट के साथ अपडेट किया गया है, वास्तव में मैं इसे अद्यतन करने गया था, जबकि आप प्रश्न आपके द्वारा लिखा गया है ताकि आप तेजी से कर रहे हैं :) –

उत्तर

32

क्या गलत हो सकता है पर दो विचार ।

सबसे पहले, सुनिश्चित करें कि आप सही Gradle निर्भरता उपयोग कर रहे हैं:

compile 'com.android.support:design:22.2.0' 

दूसरा, सुनिश्चित करें कि आपकी गतिविधि AppCompatActivity और नहीं Activity या ActionBarActivity प्रदान कर रहा है बनाते हैं।

आप अधिक जानकारी के लिए full post पढ़ सकते हैं, लेकिन यहाँ नए समर्थन डिजाइन पुस्तकालय के साथ AppCompat की आवश्यकता होगी, के बारे में प्रासंगिक उद्धरण है:

ध्यान दें कि के रूप में डिजाइन पुस्तकालय समर्थन v4 और AppCompat समर्थन लाइब्रेरी पर निर्भर करता है , जब आप डिज़ाइन लाइब्रेरी निर्भरता जोड़ते हैं तो उन्हें स्वचालित रूप से शामिल किया जाएगा।

आप को पता है क्यों चाहते हैं, आप Android का नया "पसंदीदा" कॉलबैक हैंडलिंग, विशेष रूप से AppCompatDelegate का उपयोग कर के तरीके के बारे में और अधिक पृष्ठभूमि के लिए this या this पढ़ सकते हैं।

+0

पहला भाग पहले से ही चेक किया गया है। दूसरा भाग जो मुझे नहीं है मुझे इसकी आवश्यकता होनी चाहिए क्योंकि यह एक अलग पुस्तकालय है।जिसका अर्थ है कि मुझे यह केवल प्राप्त करने में सक्षम होना चाहिए और अभी भी इसका उपयोग करने में सक्षम होना चाहिए। –

+0

@AndreasN, मेरे संपादित उत्तर देखें। – hungryghost

+1

जिसने इसे हल किया, धन्यवाद! मुझे लगता है कि हर गतिविधि AppCompatActivity पर आधारित होना चाहिए। –

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