Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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 ?

like image 533
Nevermore Avatar asked Sep 04 '16 12:09

Nevermore


3 Answers

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;
    }
like image 91
N J Avatar answered Nov 17 '22 23:11

N J


You need to add setHasOptionMenu(true) in your onCreate of fragment.
When you add this option the fragment lifecycle will calls the onCreateOptionMenu() and onOptionItemSelected().

Follow this steps:

  • Add setHasOptionsMenu(true) method in onCreate() of your Fragment.

  • Override onCreateOptionsMenu(Menu menu, MenuInflater inflater) and onOptionsItemSelected(MenuItem item) methods in your Fragment.

  • Inside your onOptionsItemSelected(MenuItem item) Activity's method, make sure you return false when the menu item action would be implemented in onOptionsItemSelected(MenuItem item) Fragment's method.

like image 27
Ichigo Kurosaki Avatar answered Nov 17 '22 21:11

Ichigo Kurosaki


Steps to create Option Menu in fragment

1.

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

2.

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle item selection
    switch (item.getItemId()) {
        case android.R.id.home:
            //call function as per your requirement
            return true;
        default:
            return false;
    }
}
like image 3
Aashish Kaushik Avatar answered Nov 17 '22 21:11

Aashish Kaushik