我的app
中很少有活动可以执行某些特定任务。
我想对几乎所有这些活动都有搜索功能。
我的设计如下:
活动1 :SearchView
中有Actionbar
小部件
活动2 :SearchView
中的Actionbar
小部件
SearchActivity :在search
中执行display
和ListView
结果。
我已在SearchActivity
的清单文件中进行了必要的配置。
当我触摸搜索图标(放大镜)时,SearchView
会扩展为允许用户输入查询,然后用户触发搜索并将搜索意图传递给SearchActivity
。< / p>
由于用户最初在Activity
上输入了搜索查询,我在SearchView
中看不到查询和SearchActivity
(这基本上是允许用户执行进一步搜索所必需的) )。
我知道要这样做,我的SearchView
也需要SearchActivity
,但如何使用在之前的活动中输入的查询预先填充它并以展开状态显示?
答案 0 :(得分:0)
我经常这样做(加上适配器实现Filterable):
public class ActivityFiltrable extends SherlockFragmentActivity implements OnQueryTextListener{
protected String _searchCurrentQuery;
@Override
protected void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.activity);
// ABS
ActionBar bar = getSupportActionBar();
bar.setTitle(R.string.tle_search);
bar.setDisplayHomeAsUpEnabled(true);
//DO STUFF
super.onCreate(savedInstanceState);
}
@Override
protected void onDestroy() {
closeKeyboard(this);
super.onDestroy();
}
@Override
public void onBackPressed() {
finish();
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
menu.clear();
getSupportMenuInflater().inflate(R.menu.action_bar_search, menu);
// SEARCH MENUITEM
MenuItem searchItem = menu.findItem(R.id.menu_search);
SearchView searchView = (SearchView) searchItem.getActionView();
searchView.setSubmitButtonEnabled(true);
searchView.setOnQueryTextListener(this);
return super.onPrepareOptionsMenu(menu);
}
public static void closeKeyboard(Context context) {
try {
InputMethodManager inputManager = (InputMethodManager) ((SherlockFragmentActivity) context).getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(((SherlockFragmentActivity) context).getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
}
catch (Exception e) {
// TODO:ERROR CLOSING KEYBOARD
}
}
/**
* SEARCH
*/
@Override
public boolean onQueryTextSubmit(String query) {
searchAction(query);
closeKeyboard(this);
return true;
}
@Override
public boolean onQueryTextChange(String newText) {
searchAction(newText);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
if (item.getItemId() == android.R.id.home) {
finish();
// overridePendingTransition(R.animator.anim_left, R.animator.anim_right);
return true;
}
break;
}
protected void searchAction(String query) {
_searchCurrentQuery = query.toString();
EtablissementApplication._adapterFilterSearch.getFilter().filter(_searchCurrentQuery);
}
}