2012-03-09 27 views
14

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

सामान्य मेनू आइटम -> खंड में कुछ स्थानांतरित हो गया है -> मेनू आइटम बटन को सहेजने/त्यागने के लिए बदलते हैं।

मेरा पहला आवेग ब्रॉडकास्ट रिसीवर को गतिविधि और खंड पार करने के लिए दोनों टुकड़ों में स्थापित करना है, लेकिन मुझे यकीन नहीं है कि यह सही है या नहीं।

उत्तर

7

मेरे लिए निम्नलिखित कार्य करता है। मैं एक कस्टम वर्ग है कि एक टुकड़ा अंदर ListView.MultiChoiceModeListener लागू करता है:

public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) { 
    // Choose the correct Action Bar menu to display 
    int menu = myCondition == true ? R.menu.my_default_menu : R.menu.my_menu_2; 

    // Configure to use the desired menu 
    mode.getMenu().clear(); 
    MenuInflater inflater = getActivity().getMenuInflater(); 
    inflater.inflate(menu); 
} 

आप कैसे पता लगाने को देखते हुए 'टुकड़ा में कुछ ले जाया गया है', का विस्तार ListView.MultiChoiceModeListener आपके लिए काम नहीं है, लेकिन उम्मीद है कि इस मेनू को बदलने के लिए कैसे दिखाता है। कुंजी ActionMode उदाहरण तक पहुंच प्राप्त करना है।

+0

आप गतिविधि के एक्शनमोड के उदाहरण कहां प्राप्त कर सकते हैं? – Neilers

4

मुझे लगता है कि आप contextual action mode का उपयोग करना चाहते हैं। ड्रैग इवेंट पर, आप एक नया एक्शनमोड शुरू करेंगे जो कि मेनू बार के साथ एक्शन बार की सामग्री को प्रतिस्थापित कर सकता है, जिसे आप उपयोगकर्ता को करने की अनुमति देना चाहते हैं। एक बार जब उपयोगकर्ता कोई कार्यवाही चुनता है, तो आप एक्शन मोड समाप्त कर देते हैं और एक्शन बार अपने पिछले राज्य में वापस आ जाता है।

20

टुकड़े एक्शनबार में मेनू बदल सकते हैं। उसके लिए आपको टुकड़ा के oncreate() पद्धति का उपयोग करके setHasOptionsMenu(true);

में आवश्यक फ्लैग जोड़ने के अपने टुकड़ा भरी हुई है तो आप सिर्फ एक गतिविधि में तरह onCreateOptionsMenu(Menu menu, MenuInflater inflater) पर कॉल हो जाएगी है। फिर अपने मेनू में आवश्यक परिवर्तन करें।

आपको मेनू को खंड में वैश्विक रूप में सहेजें, और जब भी आप कोई परिवर्तन करना चाहते हैं, तो उस पर लागू करें।

+1

यह अब तक का सबसे सही उत्तर है। –

1

सुनिश्चित नहीं हैं कि अगर एक ActionBar उदाहरण मेनू आप के साथ मदद मिलेगी लेकिन निश्चित रूप से उपयोगी होगा .. यहाँ इसके बारे में प्राप्त करने के लिए एक रास्ता है

इस प्रयास करें FragmentActivity onAttach (गतिविधि गतिविधि) का उपयोग करने से ActionBar पाने के लिए टुकड़े में विधि।

सबसे पहले अपने FragmentActivity के एक वैश्विक वस्तु टुकड़ा में इस

public class YourFragment extends Fragment { 

    private YourFragmentActivity context; 
} 

अवहेलना की तरह इस YourFragment वर्ग

@Override 
public void onAttach(Activity activity){ 
    context = (YourFragmentActivity)activity; 
    super.onAttach(activity); 
} 
YourFragment में OnCreate विधि में फिर

में इस

करते हैं
@Override 
public View onCreateView(LayoutInflater inflater, 
         ViewGroup container, Bundle savedInstanceState){ 
    ... 

    android.support.v7.ActionBar actionBar = context.getSupportActionBar(); 

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