【问题标题】:Custom Actionbar in fragment android片段android中的自定义Actionbar
【发布时间】:2015-10-21 06:55:25
【问题描述】:

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

@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();
}

//片段类

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;
    }

}

【问题讨论】:

    标签: android methods android-actionbar fragment call


    【解决方案1】:

    ActionBar 传统上是 Activity 的一部分,仅可用于 Activity。您可以通过从片段中调用getActivity() 来获取 Activity 实例并将其转换为您的 Activity,然后调用公共方法来做任何您想做的事情。

    但更好的选择是使用ToolBar 这里解释support library v7

    【讨论】:

    • 我不明白你的意思,我的问题像上面一样,如何从片段中调用活动类中的方法?
    • 即你的活动活动 = (你的活动)getActivity();然后是activity.initMenuBar();
    【解决方案2】:

    您需要在片段中获取 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;
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 2020-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-28
      相关资源
      最近更新 更多