Mik*_*ike 16 android android-actionbar
我有一个带搜索图标的操作栏.单击搜索图标后,它将扩展到用户可以键入搜索的搜索栏.
问题是,当用户输入搜索时,我希望搜索栏折叠回图标,但我无法让它在我的生活中发生.
我的操作栏菜单如下所示:
<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"
tools:context=".MainActivity" >
<item android:id="@+id/menu_search2"
android:actionViewClass="android.widget.SearchView"
android:title="Search"
android:icon="@android:drawable/ic_menu_search"
android:showAsAction="always|collapseActionView|"
android:onClick="goToSearch"
/>
<item android:id="@+id/action_scan"
android:icon="@drawable/barcode"
android:onClick="scanBarcode"
android:showAsAction="ifRoom|collapseActionView"
/>
</menu>
Run Code Online (Sandbox Code Playgroud)
我的搜索活动如下:
public class Search extends Fragment implements SearchView.OnQueryTextListener, ReadJSONResult.OnArticleSelectedListener {
private ListView lv;
View v;
SearchView searchView;
private SearchView mSearchView;
private MenuItem mSearchMenuItem;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
//set layout here
v = inflater.inflate(R.layout.activity_search, container, false);
setHasOptionsMenu(true);
getActivity().setTitle("Search");
//get user information
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
String userName = prefs.getString("userName", null);
String userID = prefs.getString("userID", null);
return v;
}
@Override
public void onCreateOptionsMenu (Menu menu, MenuInflater inflater) {
// Inflate the menu; this adds items to the action bar if it is present.
searchView = (SearchView) menu.findItem(R.id.menu_search2).getActionView();
searchView.setOnQueryTextListener(this);
searchView.setIconified(false);
}
public boolean onQueryTextSubmit (String query) {
//toast query
//make json variables to fill
searchView.setIconified(true);
searchView.clearFocus();
// url to make request
String url = "myURL";
try {
query = URLEncoder.encode(query, "UTF-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String jsonUrl = url + query;
//todo: get json
ReadJSONResult task = new ReadJSONResult(getActivity());
task.setOnArticleSelectedListener(this);
task.execute(jsonUrl);
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
// TODO Auto-generated method stub
return false;
}
@Override
public void onArticleSelected(String b, String brewery){
searchView.setIconified(true);
searchView.clearFocus();
searchView.postInvalidate();
//code to execute on click
Fragment Fragment_one;
FragmentManager man= getFragmentManager();
FragmentTransaction tran = man.beginTransaction();
//adds beer data to shared prefs for beer tabs
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
SharedPreferences.Editor editor = preferences.edit();
editor.putString("beerID",b);
editor.putString("breweryID",brewery);
editor.commit();
Fragment_one = new BeerTabs();
tran.replace(R.id.main, Fragment_one);//tran.
tran.addToBackStack(null);
tran.commit();
}
}
Run Code Online (Sandbox Code Playgroud)
Nic*_*ick 33
一种更简单的方法,即使SearchView小部件不在操作栏上也可以使用以下代码:
searchView.setQuery("", false);
searchView.setIconified(true);
Run Code Online (Sandbox Code Playgroud)
这使得SearchView在搜索完成后崩溃.
fll*_*llo 14
经过一些搜索,我找到了解决方案.该onActionViewCollapsed作品,但你有一个意外的行为(图标跳转到左,上指示灯还在这里......)-这(硬)解决方案在我的第一个和前面的答案建议,我被利用的说服collapseActionView方法.但是,SearchView.collapseActionView()因为根据文档:
折叠与此菜单项关联的操作视图.
它与小部件有关,而MenuItem与SearchView小部件无关.这就是您使用此方法时出现此错误的原因:
对于SearchView类型,方法collapseActionView()未定义
然后,解决方案是创建一个Menu变量,如下所示:
// At the top of your class
private Menu mMenu;
// onCreateOptionsMenu method
@Override
public boolean onCreateOptionsMenu(Menu menu) {
this.mMenu = menu; // init the variable
// other stuff..
return true;
}
// call the collapseActionView method
public boolean onQueryTextSubmit(String query) {
searchView.setIconified(true);
searchView.clearFocus();
// call your request, do some stuff..
// collapse the action view
if (mMenu != null) {
(mMenu.findItem(R.id.menu_search2)).collapseActionView();
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
或者另一个可能是避免工具SearchView.OnQueryTextListener并在内部执行onCreateOptionsMenu如下:
@Override
// make your Menu as 'final' variable
public void onCreateOptionsMenu (final Menu menu, MenuInflater inflater) {
searchView = (SearchView) menu.findItem(R.id.menu_search2).getActionView();
// call the query listener directly on the SearchView
searchView.setOnQueryTextListener(new OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
searchView.setIconified(true);
searchView.clearFocus();
// call the request here
// call collapse action view on 'MenuItem'
(menu.findItem(R.id.menu_search2)).collapseActionView();
return false;
}
@Override
public boolean onQueryTextChange(String newText) { return false; }
});
searchView.setIconified(false);
}
Run Code Online (Sandbox Code Playgroud)
这肯定会解决问题.快乐的编码!
| 归档时间: |
|
| 查看次数: |
12335 次 |
| 最近记录: |