android - MenuItem की जांच की गई स्थिति उसके आइकन द्वारा ठीक से नहीं दिखायी गई है




2 Answers

Http://developer.android.com/guide/topics/ui/menus.html पर आधिकारिक दस्तावेज़ के अनुसार

नोट: आइकन मेनू में मेनू आइटम (विकल्प मेनू से) एक चेकबॉक्स या रेडियो बटन प्रदर्शित नहीं कर सकता यदि आप चिह्न मेनू चेक-इन में आइटम बनाने के लिए चुनते हैं, तो आपको प्रत्येक समय स्थिति बदलकर आइकन और / या पाठ को स्वैप करके चेक स्थिति को मैन्युअल रूप से इंगित करना होगा।

आशा करता हूँ की ये काम करेगा।

मेरे पास मेनू इटेटम को इस तरह परिभाषित किया गया है:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/menu_starred"
        android:icon="@drawable/btn_star"
        android:title="@string/description_star"
        android:checkable="true"
        android:checked="true"
        android:orderInCategory="1"
        android:showAsAction="always" />
</menu>

और btn_star.xml इस तरह परिभाषित:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item 
        android:state_checked="false" 
        android:drawable="@drawable/btn_star_off_normal" />
    <item 
        android:state_checked="true"
        android:drawable="@drawable/btn_star_on_normal" />
</selector>

जब मैं इसे का उपयोग करके एक विकल्प मेनू बना देता हूं, हालांकि, आइकन को इसकी जांच की गई स्थिति में कभी नहीं दिखाया जाता है, भले ही MenuItem isChecked() गुण सत्य है।

मैं ActionBarSherlock नियंत्रण का उपयोग कर रहा हूं, हालांकि, मैं एक ही परिणाम प्राप्त कर रहा हूं अगर मैं केवल एक सामान्य विकल्प मेनू setChecked(true) करें setChecked(true) कॉल करता setChecked(true) यह अभी भी आइटम की जांच की गई स्थिति की परवाह किए बिना btn_star_off को btn_star_off प्रदर्शित करता है।

onOptionsItemSelected() विधि को सही ढंग से बुलाया जा रहा है, और मैं सफलतापूर्वक चेक किए गए गुण को बदल सकता हूं:

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if(item.isCheckable()) {
            item.setChecked(!item.isChecked());
        }
        return super.onOptionsItemSelected(item);
}

यहां एक ब्रेकपॉइंट सेट करना हैइसकीज वाली संपत्ति को बदला जा रहा है, लेकिन सही स्थिति को दर्शाने के लिए आइकन स्वयं अपडेट नहीं किया गया है

क्या मुझे कुछ याद आ रही है? क्या मैं यह गलत तरीके से कर रहा हूं? मैं समझ नहीं सकता कि यह सही तरीके से काम क्यों नहीं करेगा।




थोड़ा आसान तरीका (बिना एक्सएमएल-राज्यों फ़ाइल):

configChecked = !configChecked;
item.setChecked(configChecked);
item.setIcon(configChecked ? R.drawable.check_on : R.drawable.check_off);



Related

android menu menuitem android-actionbar