it-swarm.com.ru

Как добавить меню параметров панели действий в Android Фрагменты

Я пытаюсь открыть меню опций в Фрагменты Android. Меню параметров ActionBar не отображается в моих фрагментах.

Вот мой код, и у меня есть функции onCreateOptionsMenu() и onOptionSelected(). Мой код не показывает ошибок. Но меню опций не отображается.

package org.reachout;

import Android.os.Bundle;
import Android.support.v4.app.Fragment;
import Android.view.LayoutInflater;
import Android.view.View;
import Android.view.ViewGroup;
import Android.widget.LinearLayout;

import org.general.R;

public class ViewMessageFragment extends Fragment {

    /* (non-Javadoc)
     * @see Android.support.v4.app.Fragment#onCreateView(Android.view.LayoutInflater, Android.view.ViewGroup, Android.os.Bundle)
     */
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        if (container == null) {
            // We have different layouts, and in one of them this
            // fragment's containing frame doesn't exist.  The fragment
            // may still be created from its saved state, but there is
            // no reason to try to create its view hierarchy because it
            // won't be displayed.  Note this is not needed -- we could
            // just run the code below, where we would create and return
            // the view hierarchy; it would just never be used.
            return null;
        }
        return (LinearLayout)inflater.inflate(R.layout.viewmessages_tab_fragment_layout, container, false);
    }

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        // TODO Auto-generated method stub
        super.onCreateOptionsMenu(menu, inflater);
        inflater.inflate(R.menu.askexperts_menu, menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
       // handle item selection
       switch (item.getItemId()) {
          case R.id.action_settings:
             // do s.th.
             return true;
          default:
             return super.onOptionsItemSelected(item);
       }
    }   

}
61
Karthik Sekar

Вам необходимо вызвать setHasOptionsMenu(true) в onCreate().

Для обратной совместимости лучше сделать этот вызов как можно позже в конце onCreate() или даже позже в onActivityCreated() или что-то в этом роде.

Смотрите: https://developer.Android.com/reference/Android/app/Fragment.html#setHasOptionsMenu (логическое)

90
flx

Я опаздываю на ответ, но я думаю, что это еще одно решение, которое не упоминается здесь, поэтому размещение.

Шаг 1: Создайте xml меню, которое вы хотите добавить, как будто мне нужно добавить действие фильтра на панель действий, чтобы я создал xml filter.xml. Основная строка, на которую следует обратить внимание: Android: orderInCategory, она будет отображать значок действия вначале или в конце, где бы вы ни хотели показать. Еще одна вещь, на которую следует обратить внимание, это значение: если значение меньше, то оно будет отображаться сначала, а если значение больше, то оно будет отображаться, наконец.

filter.xml

<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" >


    <item
        Android:id="@+id/action_filter"
        Android:title="@string/filter"
        Android:orderInCategory="10"
        Android:icon="@drawable/filter"
        app:showAsAction="ifRoom" />


</menu>

Шаг 2: В методе фрагмента onCreate () просто поместите указанную ниже строку, которая отвечает за обратный вызов onCreateOptionsMenu (меню Menu, менюInInflater inflater) метод, как в Activity.

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

Шаг 3: Теперь добавьте метод onCreateOptionsMen, который будет переопределен как:

@Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        inflater.inflate(R.menu.filter, menu);  // Use filter.xml from step 1
    }

Шаг 4: Теперь добавьте onOptionsItemSelected метод, с помощью которого вы можете реализовать логику независимо от того, что вы хотите делать, когда выбираете значок добавленного действия из actionBar:

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        if(id == R.id.action_filter){
            //Do whatever you want to do 
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
78
Pankaj