5

मेरे ऐप में मैंने घर को कुछ परिस्थितियों में गैर-डिफ़ॉल्ट ड्रॉ करने योग्य के रूप में सेट किया है। कभी-कभी घर के रूप में संकेतक को बदलने के बाद डिफ़ॉल्ट आइकन पर रीसेट किया जाना चाहिए।समर्थन कार्रवाई बार का उपयोग कर डिफ़ॉल्ट संकेत के रूप में डिफ़ॉल्ट संकेत कैसे दिखाएं?

मैं

getSupportActionBar().setHomeAsUpIndicator(0); 

कौन सा documentation के अनुसार थीम सामान्य उपयोग करेगा कहते हैं का उपयोग कर की कोशिश की है। जब मैं इस, निम्न त्रुटि के साथ अनुप्रयोग क्रैश कार्य करें:

05-15 11:12:03.160: E/AndroidRuntime(13021): FATAL EXCEPTION: main 
05-15 11:12:03.160: E/AndroidRuntime(13021): Process: xxxxx.yyyyyy.zzzzzz, PID: 13021 
05-15 11:12:03.160: E/AndroidRuntime(13021): android.content.res.Resources$NotFoundException: Resource ID #0x0 
05-15 11:12:03.160: E/AndroidRuntime(13021): at android.content.res.Resources.getValue(Resources.java:1233) 
05-15 11:12:03.160: E/AndroidRuntime(13021): at android.content.res.Resources.getDrawable(Resources.java:756) 
05-15 11:12:03.160: E/AndroidRuntime(13021): at android.content.Context.getDrawable(Context.java:402) 
05-15 11:12:03.160: E/AndroidRuntime(13021): at android.support.v4.content.ContextCompatApi21.getDrawable(ContextCompatApi21.java:26) 
05-15 11:12:03.160: E/AndroidRuntime(13021): at android.support.v4.content.ContextCompat.getDrawable(ContextCompat.java:319) 
05-15 11:12:03.160: E/AndroidRuntime(13021): at android.support.v7.internal.widget.TintManager.getDrawable(TintManager.java:133) 
05-15 11:12:03.160: E/AndroidRuntime(13021): at android.support.v7.widget.Toolbar.setNavigationIcon(Toolbar.java:754) 
05-15 11:12:03.160: E/AndroidRuntime(13021): at android.support.v7.internal.app.ToolbarActionBar.setHomeAsUpIndicator(ToolbarActionBar.java:176) 
05-15 11:12:03.160: E/AndroidRuntime(13021): at xxxxx.yyyyyy.zzzzzz.updateHomeIndicator(aaaaa.java:1711) 

मैं जानता हूँ कि थीम डिफ़ॉल्ट मान सही ढंग से सेटअप है, अगर मैं एक कस्टम घर संकेतक के रूप में सेट नहीं, वापस तीर ठीक दिखाई देता है क्योंकि। setHomeAsUpIndicator(0) कॉल करने का प्रयास करने से पहले मैं setDisplayHomeAsUpEnabled(true) पर कॉल कर रहा हूं।

मुझे पता है कि मैं हमेशा अपने प्रोजेक्ट में अपरेटर संपत्ति के रूप में डिफ़ॉल्ट घर की प्रतिलिपि बना सकता हूं और उस संपत्ति का सीधे उपयोग कर सकता हूं, लेकिन यदि संभव हो तो मैं इस कार्यवाही से बचना चाहूंगा।

धन्यवाद!

ज़ैक

संपादित करें:

मैं भी कोशिश की है

getSupportActionBar().setHomeAsUpIndicator(null); 

कौन सा कोई आइकन में परिणाम जो भी प्रदर्शित किया जा रहा।

+0

आप बुलियन मूल्य के बजाय 0 क्यों गुजर रहे हैं? –

+0

setHomeAsUpIndicator() API को एक ड्रायबल या int संसाधन आईडी मान की आवश्यकता होती है। कोई बूलियन पैरामीटर एपीआई नहीं है जो इसे पूरा करती है (जहां तक ​​मुझे पता है)। – Zach

+2

@ करलोसजे करीब पढ़ते हैं, इसे काम करना चाहिए। प्रलेखन में कहा गया है: 'यदि आप इस विधि में 0 पास करते हैं, तो थीम से डिफ़ॉल्ट ड्रॉइंग का उपयोग किया जाएगा।' यह दस्तावेज़ीकरण के अनुसार पूरी तरह मान्य है, हालांकि, ऐसा लगता है कि यदि आप एक कस्टम आइकन सेट करते हैं, तो आप कॉल नहीं कर सकते इसे शून्य के बाद इसे डिफ़ॉल्ट आइकन पर फिर से सेट करने के लिए। एपीआई के साथ यह एक कोने केस होना चाहिए। –

उत्तर

0

मैं के स्रोत कोड का पालन करें: ToolbarActionBar.setHomeAsUpIndicator()

और जब मैं के स्रोत कोड देखें: ContextCompat.getDrawable(), यह कहते हैं: "मान 0 गलत पहचानकर्ता है"। Resources.getValue()

/** 
* Return the raw data associated with a particular resource ID. 
* 
* @param id The desired resource identifier, as generated by the aapt 
*   tool. This integer encodes the package, type, and resource 
*   entry. The value 0 is an invalid identifier. 
* @param outValue Object in which to place the resource data. 
* @param resolveRefs If true, a resource that is a reference to another 
*     resource will be followed so that you receive the 
*     actual final resource data. If false, the TypedValue 
*     will be filled in with the reference itself. 
* 
* @throws NotFoundException Throws NotFoundException if the given ID does not exist. 
* 
*/ 
public void getValue(int id, TypedValue outValue, boolean resolveRefs) 
     throws NotFoundException { 
    boolean found = mAssets.getResourceValue(id, 0, outValue, resolveRefs); 
    if (found) { 
     return; 
    } 
    throw new NotFoundException("Resource ID #0x" 
           + Integer.toHexString(id)); 
} 

अब तक, मैं करने के लिए कोई विशेष हैंडलिंग नहीं देख सकते हैं:

/** 
* Return a drawable object associated with a particular resource ID. 
* <p> 
* Starting in {@link android.os.Build.VERSION_CODES#LOLLIPOP}, the returned 
* drawable will be styled for the specified Context's theme. 
* 
* @param id The desired resource identifier, as generated by the aapt tool. 
*   This integer encodes the package, type, and resource entry. 
*   The value 0 is an invalid identifier. 
* @return Drawable An object that can be used to draw this resource. 
*/ 
public static final Drawable getDrawable(Context context, int id) { 
    final int version = Build.VERSION.SDK_INT; 
    if (version >= 21) { 
     return ContextCompatApi21.getDrawable(context, id); 
    } else { 
     return context.getResources().getDrawable(id); 
    } 
} 

और मैं स्रोत कोड का पालन रखने के लिए, और मैं अंत में कोड नीचे देखें, इस जहां अपवाद फेंक है '0'। इसलिए, मुझे लगता है कि ऊपर दिए गए आधिकारिक दस्तावेज़ में यह एक बग है। इस क्रैश त्रुटि को हल करने का आसान तरीका मौजूदा पहचानकर्ता का उपयोग करना है, जैसे कि आपकी डिफ़ॉल्ट आइकन आईडी।

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