2015-06-15 20 views
7

Tôi đang cố gắng thổi phồng menu trong lớp thừa kế lớp Fragment. Đây là phương pháp của tôi OnCreateOptionsMenu() -android getMenuInflater() trong phân lớp phân đoạn - không thể giải quyết phương thức

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

Điều này đặt ra các lỗi sau:

Cannot resolve method 'getMenuInflater()'

tôi đã cố gắng:

MenuInflater inflater = getActivity().getMenuInflater(); 

nhưng sau đó Android Studio nhấn mạnh @Override màu đỏ và nói:

Method does not override method from its superclass

Tôi cũng đã cố gắng để tạo ra một phương pháp getMenuInflater trong cùng một lớp và có nó trở new MenuInflater(this)

public MenuInflater getMenuInflater() { 
    return new MenuInflater(this); 
} 

nhưng sau đó các lỗi sau được ném:

error: incompatible types: ForecastFragment cannot be converted to Context

error: method does not override or implement a method from a supertype

Tôi phải làm gì?

Trả lời

7

Chữ ký của onCreateOptionsMenu bạn không nhìn bên phải. Hãy nhìn vào các tài liệu here

Hãy xem mã này

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setHasOptionsMenu(true);//Make sure you have this line of code. 
} 

@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    // TODO Add your menu entries here 
    super.onCreateOptionsMenu(menu, inflater); 
} 
+1

Trong khi phương pháp giải quyết một cách chính xác, tôi vẫn không thể có được 'Phương pháp không ghi đè lên từ một supertype' ra đi. –

0

Sử dụng mã này:

@Override 
public boolean OnCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    inflater.inflate(R.menu.forecastfragment, menu) ; 
    final MenuItem item = menu.findItem(R.id.forecastID); 
} 

nơi forecastID là ID của mặt hàng đó trong forcastfragment.xml menu. Đồng thời thêm setHasOptionsMenu(true); vào số OnCreateView() của bạn để đoạn sẽ gọi phương thức.

Một mặt, thực tiễn tiêu chuẩn để bao gồm từ 'menu' trong tên tệp trình đơn của bạn, chẳng hạn như 'forecastfragment_menu.xml'. Nó tránh nhầm lẫn.

1
  • Theo phương thức API không overriding a super.
  • Bạn không gọi đúng phương thức inflate.

Bạn phải sử dụng nó theo cách này:

@Override 
public boolean OnCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    inflater.inflate(R.menu.forecastfragment, menu); 
    return true; 
} 
Các vấn đề liên quan