首页 > 解决方案 > 如何在片段的 onOptionsItemSelected 中调用自定义类

问题描述

如何在 onOptionsItemSelected 方法中调用自定义类。我有片段,有些片段有不同的操作栏项目。我不想item.getItemId()一遍又一遍地编写相同的代码。我写了一个关于操作栏选定项目的类。它不起作用。如何调用自定义类和方法?

public class ActionMenuItemSelected {
    public Fragment actionMenuSelectedItem(MenuItem item) {
        Fragment selected_fragment = null;
        FirebaseAuth mAuth = FirebaseAuth.getInstance();

        switch (item.getItemId()) {

            case R.id.action_menu_Resmece:
                selected_fragment = new MainFragment();
                break;
            case R.id.action_menu_account:
                selected_fragment = new AccountFragment();
                break;
            case R.id.action_level_about_us:
                selected_fragment = new AboutUsFragment();
                break;
            case R.id.action_level_contact_us:
                selected_fragment = new ContactUsFragment();
                break;
            case R.id.action_menu_log_out:
                mAuth.signOut();
                selected_fragment = new RegisterFragment();
                Toast.makeText(getApplicationContext(), "Logged out", Toast.LENGTH_SHORT).show();
                break;
        }

        return selected_fragment;


    }
    //region goToFragment
    public void goToFragment(Fragment selectFragment) {
        AppCompatActivity activity = (AppCompatActivity) getContext();

        activity.getSupportFragmentManager().beginTransaction().replace(R.id.main_frame, selectFragment).addToBackStack(null).commit();

    }
//endregion
}

我添加了一个类名 ActionMenuItemSelected 并且我想在片段的 onOptionsItemSelected 方法中调用此方法。我做不到。你能帮我调用这个方法吗?

标签: androidandroid-fragments

解决方案


在您的活动中,您需要充气菜单布局

//Add this method to your activity
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main, menu); // Inflate your menu
    return true;
}

设置菜单布局后,您可以调用自定义类

private final ActionMenuItemSelected amis = new ActionMenuItemSelected();

public boolean onOptionsItemSelected(MenuItem item) {        
    Fragment frag = amis.actionMenuSelectedItem(item);
    goToFragment(frag); // assuming that this method is in your class Activity 
    return true;
}

但是,如果在您的应用程序中只有一个 Activity 具有此菜单设置,您可以将所有ActionMenuItemSelected.actionMenuSelectedItem逻辑放入您的onOptionsItemSelected(Menu item)方法中。

setHasOptionsMenu(true);如果您在 Fragment 中,请不要忘记调用onCreate() 方法


推荐阅读