Android 在片段内的工具栏中添加图标
Android add icon in toolbar inside a fragment
我实现了一个工具栏,并根据我的要求将其替换为我的操作栏。现在我想在片段内的工具栏中添加一个图标。我尝试了 onCreateOptionMenu() 并将我的菜单 xml 传递给它。但它不会工作。我还尝试了一些其他的东西和谷歌搜索,但到目前为止没有任何效果。有没有人对此有任何想法。这是我的片段代码
public class Fragment_FavouriteLocations extends Fragment {
public Fragment_FavouriteLocations() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_main_fav_location_row_item, container, false);
}
@Override
public void onCreateOptionsMenu(
Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.fav_location_menu, menu);
super.onCreateOptionsMenu(menu, inflater);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.edit_button) {
Toast.makeText(getActivity(), "", Toast.LENGTH_LONG).show();
return true;
}
//
// if(id == R.id.action_search){
// Toast.makeText(getApplicationContext(), "Search action is selected!", Toast.LENGTH_SHORT).show();
// return true;
// }
return super.onOptionsItemSelected(item);
}
}
这是我的菜单xml
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:mayApp="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/edit_button"
mayApp:icon="@android:drawable/ic_menu_edit"
android:title="Edit"
mayApp:showAsAction="always" />
</menu>
提前致谢
在您的 Fragment 中,在 onCreateView()
方法中,您必须添加:
setHasOptionsMenu(true);
否则永远不会调用 onCreateOptionsMenu()
。
您可能需要使用 invalidateOptionsMenu() 来告诉片段像这样重绘菜单操作...
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getActivity().invalidateOptionsMenu();
setHasOptionsMenu(true);
}
我实现了一个工具栏,并根据我的要求将其替换为我的操作栏。现在我想在片段内的工具栏中添加一个图标。我尝试了 onCreateOptionMenu() 并将我的菜单 xml 传递给它。但它不会工作。我还尝试了一些其他的东西和谷歌搜索,但到目前为止没有任何效果。有没有人对此有任何想法。这是我的片段代码
public class Fragment_FavouriteLocations extends Fragment {
public Fragment_FavouriteLocations() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_main_fav_location_row_item, container, false);
}
@Override
public void onCreateOptionsMenu(
Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.fav_location_menu, menu);
super.onCreateOptionsMenu(menu, inflater);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.edit_button) {
Toast.makeText(getActivity(), "", Toast.LENGTH_LONG).show();
return true;
}
//
// if(id == R.id.action_search){
// Toast.makeText(getApplicationContext(), "Search action is selected!", Toast.LENGTH_SHORT).show();
// return true;
// }
return super.onOptionsItemSelected(item);
}
}
这是我的菜单xml
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:mayApp="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/edit_button"
mayApp:icon="@android:drawable/ic_menu_edit"
android:title="Edit"
mayApp:showAsAction="always" />
</menu>
提前致谢
在您的 Fragment 中,在 onCreateView()
方法中,您必须添加:
setHasOptionsMenu(true);
否则永远不会调用 onCreateOptionsMenu()
。
您可能需要使用 invalidateOptionsMenu() 来告诉片段像这样重绘菜单操作...
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getActivity().invalidateOptionsMenu();
setHasOptionsMenu(true);
}