片段 android 中的自定义操作栏

Custom Actionbar in fragment android

我使用 actionbar 创建了一个简单的项目,我有一个 class 和一个片段 class,我在 class 中定义了 custome actionbar,我的问题是如何调用方法 actionbar在 class 的片段 class 中, 此代码如下:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_holder);
    fragmentArray = new ConferenceFragment[8];
    // Load main fragment
    fragment = new HomeFragment();
    fragmentArray[0] = fragment;
    currentFragmentIndex = 0;
    FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
    fragmentTransaction.replace(R.id.holder, fragment).commit();
//        initMenuBar();
}

public void initMenuBar(){
    ActionBar actionBar = getActionBar();
    actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
    actionBar.setCustomView(R.layout.menu_bar);

    ImageButton buttonSideMenu = (ImageButton) findViewById(R.id.bt_menu);
    buttonSideMenu.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
        // TODO Auto-generated method stub
        toggle();
//            Toast.makeText(getApplicationContext(), "Clicked!",Toast.LENGTH_LONG).show();
        }
    });
    actionBar.show();
}

//片段class

public class HomeFragment extends Fragment{

    View v;
    MainActivity mainactivity;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        mainActivity.initMenuBar(); // ERROR IN THIS LINE
        super.onCreateView(inflater, container, savedInstanceState);
        v = inflater.inflate(R.layout.home_fragment, container, false);

        return v;
    }

}

ActionBar is traditionally the part of Activity and is available to activity only. You can get Activity instance by calling getActivity() 从片段并将其转换为您的 activity 然后调用 public 方法来做任何你想做的事。

但更好的选择是使用 ToolBar explained here support library v7

您需要在片段中获取 MainActivity 的上下文引用才能访问 activity 的方法。

试试这个。

public class HomeFragment extends Fragment{

    View v;
    Context mContext;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreateView(inflater, container, savedInstanceState);
        v = inflater.inflate(R.layout.home_fragment, container, false);
        mContext = getActivity();
        ((MainActivity) mContext).initMenuBar();
        return v;
    }

}