onCreateOptionsMenu Parça İçi


182

Ben verdikten setHasOptionsMenu(true)içeride onCreateView, ama hala arayamam onCreateOptionsMenuiç parçaları.

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
                         Bundle savedInstanceState) {   
   setHasOptionsMenu(true);             
   return inflater.inflate(R.layout.facesheet, container, false);
}

Aşağıda benim onCreateOptionsMenukodum.

@Override
public boolean onCreateOptionsMenu(com.actionbarsherlock.view.Menu menu) {
    getSupportMenuInflater().inflate(R.menu.layout, menu);
    return (super.onCreateOptionsMenu(menu));
}

Aldığım hata mesajı:

onCreateOptionsMenu(Menu)Fragment türünün yöntemi , bir üst tip yöntemini geçersiz kılmalı veya uygulamalıdır.


1
'SetHasOptionsMenu (true);' için teşekkürler, bunu arıyordum.
Fabricio PH

Yanıtlar:


497

bunu dene,

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.menu_sample, menu);
    super.onCreateOptionsMenu(menu,inflater);
}

Ve onCreateseçeneklerinizin ekranınızda görünmesini sağlamak için bu satırı ekleyin.Toolbar

setHasOptionsMenu(true);

182
bu satırı setHasOptionsMenu(true);
eklemezseniz çağrılmayacaktır

10
fragmanlar için onCreateOptionsMenu () yöntemi Etkinlikler'den farklı argümanlara sahiptir.
Jorge

3
ve aynı zamanda, yukarıdaki ans'da belirtildiği gibi onCreateOptionsMenu () 'un boole'sinden farklı olarak void olarak farklı bir dönüş türü.
Dexter

4
İlginç not: İçeren Etkinliğinizde onCreateOptionsMenu'nu da geçersiz kılarsanız, her iki seçenek menüsü öğesi de görüntülenir.
Adam Johns

5
setHasOptionsMenu(true);tam olması için çağrılmalıdır onCreate().
Roel

21

Action_settings'i tanımlayan otomatik olarak oluşturulmuş res / menu / menu.xml dosyasına zaten sahipsiniz .

Senin içinde MainActivity.java aşağıdaki yöntemleri vardır:

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

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    switch (id) {
        case R.id.action_settings:
            // do stuff, like showing settings fragment
            return true;
    }

    return super.onOptionsItemSelected(item); // important line
}

In onCreateView()sizin Fragment çağrısı yöntemiyle:

setHasOptionsMenu(true); 

ve ayrıca bu 2 yöntemi ekleyin:

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.fragment_menu, menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    switch (id) {
        case R.id.action_1:
            // do stuff
            return true;

        case R.id.action_2:
            // do more stuff
            return true;
    }

    return false;
}

Son olarak, yeni dosya eklemek res / menü / fragment_menu.xml tanımlamaya ACTION_1 ve ACTION_2 .

Bu şekilde uygulamanız Fragment'ı görüntülediğinde, menüsünde 3 giriş bulunur:

  • ACTION_1 gelen res / menü / fragment_menu.xml
  • res / menu / fragment_menu.xml dosyasından action_2
  • action_settings gelen res / menü / menu.xml

1
soru aktivite değil parçaların
içindeydi

2
@OlivierM cevap parça menüsünü açıklıyor. Etkinlik menüsü ile nasıl etkileşime girdiğinin açıklamasını takdir ettim.
Aranda

13

@Alexander Farber ve @Sino Raj cevaplarını denedim. Her iki cevap da güzel, ama eksik olanı bulana kadar parçamın içindeki onCreateOptionsMenu'yu kullanamadım:

Faaliyetime şu şekilde setSupportActionBar (araç çubuğu) ekle:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.id.activity_main);

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
}

Umarım bu cevap aynı problemi olan biri için yararlı olabilir.


4

Aramak

setSupportActionBar(toolbar)

içeride

onViewCreated(...) 

Parçanın

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    Toolbar toolbar = (Toolbar) view.findViewById(R.id.toolbar);
    ((MainActivity)getActivity()).setSupportActionBar(toolbar);
    setHasOptionsMenu(true);
}

1
 @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.activity_add_customer, container, false);
        setHasOptionsMenu(true);
}

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.menu_sample, menu);
    super.onCreateOptionsMenu(menu,inflater);
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.