2016-08-17 3 views
1

Это мой onActivityCreated() метод:Как я могу добавить прядильщик на панель инструментов в конкретном фрагменте. Может кто-нибудь сказать мне, как я могу это сделать?

@Override 
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {  
     setHasOptionsMenu(true); 
     super.onActivityCreated(savedInstanceState); 
    } 

Это мой onCreateOptionsMenu() метод, когда я надуть кок и установить адаптер:

@Override 
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
     inflater.inflate(R.menu.menu, menu); 
     MenuItem menuItem = menu.findItem(R.id.menu_spinner); 
     mCountrySpinner = (Spinner) MenuItemCompat.getActionView(menuItem); 

     ArrayAdapter<String> countryAdapter = new ArrayAdapter<String>(getContext(), android.R.layout.simple_spinner_dropdown_item, mCountryList); 
       countryAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     mCountrySpinner.setAdapter(countryAdapter); 
     super.onCreateOptionsMenu(menu, inflater); 
    } 

Это мое меню XML, где я добавлен элемент и набор app:actionViewClass в android.widget.Spinner:

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    tools:context=".activity.MainActivity"> 

Это элемент я завышены в XML меню :

<item 
    android:id="@+id/menu_spinner" 
    android:background="#ff00" 
    android:title="@string/countryname" 
    app:actionViewClass="android.widget.Spinner" 
    app:showAsAction="always"></item> 
</menu> 

ответ

1

В onCreateView() вашего фрагмента называют этот setHasOptionsMenu(true), а затем надуть меню в вашем фрагменте

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.fragment_menu, menu); 

    MenuItem item = menu.findItem(R.id.spinner); 
    Spinner spinner = (Spinner) MenuItemCompat.getActionView(item); 

    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, 
      R.array.spinner_list_item_array, android.R.layout.simple_spinner_item); 
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

    spinner.setAdapter(adapter); 
    return true; 
} 

сделать создать меню XML с именем fragment_menu и установить spinner в actionView в menuItem.

+0

sir.i использую ту же процедуру. см. мой код. Но это не работает . –

+0

вы можете разместить свое меню xml и попробовать установить setHasOptionsMenu (true) в onCreateView() –

+0

сэр, пожалуйста, проверьте мое меню xml. –

0

создать fragment_menu.xml в меню и добавьте следующий код:

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto"> 
    <item 
     android:id="@+id/spinner" 
     android:title="ActionBar Spinner" 
     app:actionViewClass="android.widget.Spinner" 
     android:background="#ff00" 
     app:showAsAction="always" /> 
</menu> 

Override onCreateOptionsMenu метод фрагмента и добавить folloing код:

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.fragment_menu, menu); 

     MenuItem item = menu.findItem(R.id.spinner); 
     Spinner spinner = (Spinner) MenuItemCompat.getActionView(item); 

     ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, 
       R.array.spinner_list_item_array, android.R.layout.simple_spinner_item); 
     adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

     spinner.setAdapter(adapter); 
     return true; 
} 

надеюсь, что это может работать.

+0

это работает в деятельности. но я хочу добавить spinner в фрагмент. И тот же код, который я тоже использую. Но это не работает. –

+0

@aman Вы можете использовать menu.findItem (R.id.spinner) .setVisible (false); в операции onCreateOptionMenu, а в фрагменте - в true. –

+0

его работы. но когда я выбираю элемент, который он не отображает на панели инструментов. –