2015-07-30 3 views
0

Я создаю простой проект с помощью панели действий, у меня один класс и один класс фрагмента, я определяю 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; 
    } 

} 

ответ

2

ActionBar традиционно является частью деятельности и доступна только деятельности. Вы можете получить экземпляр Activity, вызвав getActivity() из фрагмента и отбросив его в свою деятельность, а затем вызовите общедоступный метод, чтобы делать все, что вы хотите.

Но лучший вариант заключается в использовании ToolBar объясняется здесь support library v7

+0

Я не понимаю, с вашим разумом, моей проблемой, как и выше, как вызвать метод в классе активности из фрагмента? – Bekti

+0

т. Е. Активность YourActivity = (YourActivity) getActivity(); затем activity.initMenuBar(); –

+0

большое спасибо – Bekti

0

Вы должны получить контекстную ссылку вашего MainActivity в вашем фрагменте к способу активности доступа.

Попробуйте это.

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

} 
Смежные вопросы