我有一个工具栏和一个导航抽屉.当我启动我的应用程序时,会创建工具栏和导航抽屉.当我单击导航抽屉中的项目时,它会启动新的片段并保留相同的工具栏.当我启动特定片段时,如何将菜单项添加到工具栏中,例如搜索,添加,编辑?我不希望它们在程序的开头,但是动态创建.此外,我如何能够单击这些按钮并让它们启动其他片段.我希望它在一个片段中,与另一个片段中的编辑按钮相比,工具栏中的编辑按钮执行特定的操作.谢谢!
Menu_toolbar:
<?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/edit"
android:orderInCategory="1"
android:title="Edit"
app:showAsAction="always"
android:icon="@drawable/pencil_icon"/>
<item android:id="@+id/add"
android:orderInCategory="1"
android:title="Add"
app:showAsAction="always"
android:icon="@drawable/plus_icon"/>
Run Code Online (Sandbox Code Playgroud)
工具栏:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="55dp"
android:background="#10a1ff"
android:title="Home"
/>
Run Code Online (Sandbox Code Playgroud) 我有一个Sherlock片段活动,其中有3个片段.
片段A,片段B,片段C是三个片段.我想仅在片段B中显示完成选项菜单.
并且活动以片段A开始.当选择片段B时,添加完成按钮.
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
if(!menusInflated){
inflater.inflate(R.menu.security, menu);
menusInflated=true;
}
super.onCreateOptionsMenu(menu, inflater);
}
Run Code Online (Sandbox Code Playgroud)
当我再次启动Fragment AI想要选项菜单DONE(在片段B中设置)为此我就是这样做的
setHasOptionsMenu(false);
MenuItem item = (MenuItem) menu.findItem(R.id.done_item);
item.setVisible(false);
Run Code Online (Sandbox Code Playgroud)
但是这根本就没有隐藏,如果首次使用Fragment A启动Activity,它也会给出NullPointerException.
请告诉我这是什么问题.
我在输入值后尝试清除并关闭SearchView.我找到了一个解决方案,但它会关闭搜索,如果我再次尝试搜索,则不会执行任何操作.
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main_actions, menu);
searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
searchView.setOnQueryTextListener(searchListener);
return super.onCreateOptionsMenu(menu);
}
SearchView.OnQueryTextListener searchListener = new SearchView.OnQueryTextListener(){
@Override
public boolean onQueryTextChange(String arg0) {
return false;
}
@Override
public boolean onQueryTextSubmit(String query) {
new JsoupGetData("http://api.openweathermap.org/data/2.5/find?q="+ query + "&lang=pl").execute();
try {
searchView.onActionViewCollapsed();
}
catch(Exception ex){
ex.printStackTrace();
System.out.println(ex);
}
return true;
}
};
Run Code Online (Sandbox Code Playgroud)
我只能第一次搜索.每次下次它只关闭我的输入键盘而什么都不做.如何以正确的方式执行?
编辑.建议的更改如下所示:
try {
searchView.setIconified(true);
}
Run Code Online (Sandbox Code Playgroud)
activity_main_actions.xml:
<!-- Search Widget -->
<item android:id="@+id/action_search"
android:icon="@drawable/ic_action_search"
android:title="@string/action_search"
android:showAsAction="always"
android:actionViewClass="android.widget.SearchView"/>
Run Code Online (Sandbox Code Playgroud)
EDIT2:
showAsAction="always|collapseActionView"当我点击搜索时,我改变但它关闭了我的应用程序.
我还将监听器放在OnCreateOptionsMenu中以查看它是否会改变任何内容:
@Override
public boolean onCreateOptionsMenu(Menu …Run Code Online (Sandbox Code Playgroud) 你可以帮助我按下按钮时如何禁用searchview吗?我正在尝试这段代码:
searchView.setEnabled(false);
searchView.setFocusableInTouchMode(false);
searchView.clearFocus();
Run Code Online (Sandbox Code Playgroud)
但它似乎无法正常工作.我仍然可以在searchview中输入文字.
谢谢.. :))