【发布时间】:2011-06-16 13:21:07
【问题描述】:
我实际上是在尝试使用 Android 的内置搜索界面,但是当我尝试使用搜索查询传递数据时遇到了一些问题。
这里有一个简短的解释:我在第一个 Activity (FirstActivity) 中有一个名为“Category”的对象,它实现了 Serializable(我已经在活动之间成功传递了它),我想执行与该类别相关的搜索,并显示结果在第二个Activity(SecondActivity)中。
所以,在 FirstActivity 中我重写了 onSearchRequest 方法:
@Override
public boolean onSearchRequested() {
Bundle appData = new Bundle();
appData.putSerializable("category", _currentCategory);
Log.d(Utils.LOG_TAG, "Bundle : "+appData.keySet());
startSearch(null, false, appData, false);
return true;
}
在 SecondActivity 中,我尝试获取这个 Bundle:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
handleIntent(getIntent());
}
private void handleIntent(Intent intent){
Bundle appData = intent.getBundleExtra(SearchManager.APP_DATA);
if(appData == null) Log.d(Utils.LOG_TAG, "appData == null");
Log.d(Utils.LOG_TAG, "Extras : "+intent.getExtras().keySet());
}
问题是 appData 似乎每次都等于 null。这是 logcat 输出:
Bundle : [category]
appData == null
Extras : [query, user_query]
我尝试将其他一些对象添加到 Bundle(布尔值等)中,但它根本没有改变任何东西,而且我的 appData 一直为空。
【问题讨论】:
-
请添加您的
startSearch()方法。问题可能出在这种方法中,您正在构建用于启动第二个活动的 Intent。 -
startSearch() 是来自 Activity 的现有方法:developer.android.com/reference/android/app/…。从我读到的,它应该可以处理那些东西。
-
我发现最好的方法是重写 StartActivity。见:enjoysmile.com/blog/28/…
标签: android bundle android-searchmanager