android - कुछ टुकड़ों में MenuItem छुपाएं




android-fragments android-optionsmenu (6)

इसी तरह के समाधान के कई अलग-अलग संस्करण हैं लेकिन दुर्भाग्यवश, उनमें से कोई भी मेरे लिए काम नहीं करता है। मैं साझा कर रहा हूं कि अंततः मेरे मेनू के साथ पूरे ओवरफ्लो मेनू को छिपाने के लिए उपयोगी था। सोचा शायद यह किसी के लिए उपयोगी है।

मैंने अपने मेनू को एक id साथ समूहीकृत किया और फिर उस id संदर्भित किया

@Override
public void onPrepareOptionsMenu(Menu menu) {
    menu.setGroupVisible(R.id.menu_overflow, false);
    super.onPrepareOptionsMenu(menu);
}

यदि आप किसी भी व्यक्तिगत मेनू आइटम को छिपाना चाहते हैं तो आप इसका उपयोग कर सकते हैं

menu.getItem(R.id.action_licenses).setVisible(false);

महत्वपूर्ण बात यह है कि आपको setOptionsMenu(true) पर होना चाहिए onViewCreated()

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    setHasOptionsMenu(true);

मैं मेनू ड्रॉवर का उपयोग कर रहा हूं जिसमें अधिक Fragment । कुछ Fragment मेरे पास मेनू आइटम रीफ्रेश है लेकिन कुछ टुकड़ों में मैं इस मेनू आइटम को छिपाना चाहता हूं (मुझे मेनू दिखाना नहीं है लेकिन मैं ActionBar छुपा नहीं चाहता)।

मैं onCreateOptionsMenu() को Fragment ओवरराइड जोड़ने का प्रयास करता हूं जहां मैं यह मेनू आइटम नहीं दिखाना चाहता लेकिन मैं इसे काम नहीं कर सकता। मैं कई तरह से कोड में टिप्पणी लाइन देखने की कोशिश करो। क्या कोई विचार समस्या है? और आखिरी बार मेनू आइटम छुपाएं जब मैं मेनू ड्रावर को सक्रिय करता हूं जिसे onPrepareOptionsMenu() कहा जाता है लेकिन जब मैं Fragment में हूं तो मुझे ऐसा करने की ज़रूरत है।

Fragment जहां मैं मेनू आइटम छुपा चाहता हूँ रिफ्रेश:

 public class FindPeopleFragment extends Fragment {
    public FindPeopleFragment(){}

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_find_people, container, false);
        //setHasOptionsMenu(false);
        return rootView;
    }

    private Menu menu=null;
    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater)
    {
        inflater.inflate(R.menu.main, menu);
        this.menu=menu;
        menu.findItem(R.id.refresh).setVisible(false);
        getActivity().invalidateOptionsMenu();
        //setHasOptionsMenu(false);
        super.onCreateOptionsMenu(menu,inflater);
    }
}

मुख्य क्रियाशीलता जहां मेनू ड्रावर परिभाषित किया गया है:

 //Slide menu item click listener
private class SlideMenuClickListener implements
        ListView.OnItemClickListener {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position,
                            long id) {
        // display view for selected nav drawer item
        displayView(position);
    }
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // toggle nav drawer on selecting action bar app icon/title
    if (mDrawerToggle.onOptionsItemSelected(item)) {
        return true;
    }
    switch (item.getItemId()) {
        case R.id.refresh:
            Toast.makeText(this, "Refreshing data...", Toast.LENGTH_SHORT).show();
            return true;
    }
    return super.onOptionsItemSelected(item);
}

 // Called when invalidateOptionsMenu() is triggered
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    // if nav drawer is opened, hide the action items
    boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);
    menu.findItem(R.id.refresh).setVisible(!drawerOpen);
    return super.onPrepareOptionsMenu(menu);
}

उस टुकड़े में जहां आप आइटम को छिपाना चाहते हैं

@Override
public void onPrepareOptionsMenu(Menu menu) {
    MenuItem item=menu.findItem(R.id.action_search);
    item.setVisible(false);

और अपने टुकड़े के क्रिएट () में

 setHasOptionsMenu(true);

बस उस आइटम को ढूंढें जिसे आप findItem का उपयोग करके छिपाना चाहते हैं, फिर इसकी दृश्यता को false सेट करें।

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.main, menu);
    MenuItem item = menu.findItem(R.id.action_settings);
    item.setVisible(false);
}

मैंने अभी fragmnet में menuitem छिपाने के लिए कोड का उपयोग किया है जहां मैं इसका उपयोग नहीं करना चाहता हूं। नोट: कृपया टिप्पणी पढ़ें

@Override
public boolean onCreateOptionsMenu(Menu menu) {

    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.main, menu);
    Fragment whichFragment=getVisibleFragment();//getVisible method return current visible fragment
    String shareVisible=whichFragment.getClass().toString();
    if(shareVisible.equals(AccFragment.class.toString())
            ||shareVisible.equals(SocFragment.class.toString())
            ||shareVisible.equals(DevFragment.class.toString())
            ){
        MenuItem item=menu.findItem(R.id.action_share);
        item.setVisible(false);
    }
    return super.onCreateOptionsMenu(menu);
}

Fragment जहां आप कोई मेनू विकल्प नहीं दिखाना चाहते हैं, आपको setHasOptionsMenu(false); onCreate() , इस तरह:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setHasOptionsMenu(false);
}

हालांकि, जो मेनू दिखाया जा रहा है कि आप छिपाना चाहते हैं (REFRESH), मुख्य गतिविधि से संबंधित है। यही कारण है कि यह हमेशा दिखाया जाता है। चूंकि आप Fragment स्तर (और Activity विकल्प मेनू नहीं दिखाते) पर मेनू को नियंत्रित करना चाहते हैं, इसलिए मेरा सुझाव Activity से मेनू कोड को हटाना और इसे अपने Fragment में लागू करना है।

Activity एस और Fragment प्रत्येक के अपने अलग मेनू हो सकता है। यह link देखें।


टुकड़ा वर्ग में

 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setHasOptionsMenu(true);
    }

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        super.onCreateOptionsMenu(menu, inflater);
        menu.clear();
    }




android-optionsmenu