Search code examples
androidandroid-fragmentsfragment

Add onOptionsItemSelected calling in Fragment


@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //no inspection SimplifiableIfStatement
    if (id == R.id.action_filter) {
        FragmentManager fm = getSupportFragmentManager();
        if (userType.equals("İş Arayan"))
            filterDialogTitle = "İş İlanları Filtre";
        else if (userType.equals("Hizmet Arayan"))
            filterDialogTitle = "Hizmet İlanları Filtre";
        FilterDialogFragment editNameDialogFragment = FilterDialogFragment.newInstance(filterDialogTitle);
        editNameDialogFragment.show(fm, "fragment_edit_name");
        return true;
    }

    return super.onOptionsItemSelected(item);
}

I added in Fragment, but it didn' t got called, if i add in MainActivity, it works but i want to call it in Fragment. How can i do this ?


Solution

  • In Fragment you have to call setHasOptionsMenu(true)

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

    Then suppose you have to handle menu_item_to_handle_in_fragment item click

    For Fragment class

      @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            switch (item.getItemId()) {
    
            case R.id.menu_item_to_handle_in_fragment:
                // Do onlick on menu action here
                return true;
            }
        return false;
    }
    

    For Activity class

     @Override
            public boolean onOptionsItemSelected(MenuItem item) {
                switch (item.getItemId()) {
    
                case R.id.menu_item_to_handle_in_fragment:
                    return false;
                }
            return false;
        }