android-是否有很好的解决方案,分别在TabActivity中搜索选项卡中的每个活动?
作者:互联网
我的活动导航存在问题,搜索效果很好.
活动层次结构如下所示:
/ MyListActivityA -- ItemActivityA
MainActivity -- MyTabActivity -- MyListActivityB -- ItemActivityB
\ MyListActivityB -- ItemActivityC
TabActivity中的选项卡是使用Intents和MyListActivity创建的.
MyListActivities在清单中声明如下:
<activity
android:name=".views.OrderListView">
<intent-filter>
<action
android:name="android.intent.action.SEARCH" />
</intent-filter>
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable_orders" />
</activity>
每个MyListActivity都有自己的SearchRecentSuggestionsProvider.
首先解决的问题
当在MyListActivity的任何一个上调用搜索时,我得到了MyTabActivity之外的活动.因此实现了重定向到MyTabActivity.
在MyListActivity的onCreate()中,检查意图操作.如果它是
Intent.ACTION_SEARCH
然后启动TabActivity并完成当前操作,如下所示:
if(Intent.ACTION_SEARCH.equals(intent.getAction())) {
String query = intent.getStringExtra(SearchManager.QUERY);
intent.setClass(context, MyTabActivity.class);
intent.setAction(MyTabActivity.ACTION_SEARCH_PROXY);
Bundle appData = intent.getBundleExtra(SearchManager.APP_DATA);
if(appData != null) {
intent.putExtras(appData);
}
intent.putExtra(Constants.ACTIVITY_TYPE, activityType);
intent.putExtra(ActivityTabView.EXTRA_SEARCH_QUERY, query);
context.startActivity(intent);
context.finish();
}
当MyListActivity找到
ActivityTabView.EXTRA_SEARCH_QUERY
它使搜索查询列表上.问题解决了.
第二个解决的问题
单击“返回”按钮清除搜索查询-可以.但是再次单击“返回”将显示以前的搜索.
这就是为什么我将noHistory放入MyTabActivity的原因:
<activity
android:name=".views.MyTabActivity"
android:noHistory="true">
</activity>
第三个未解决的问题
现在,例如,从MyListActivityA转到ItemActivityA,然后单击“返回”将重定向到MainActivity.由于noHistory参数,我无法返回MyTabActivity.
对于在TabActivity中分别为Tab中的每个活动使用Android搜索,有什么好的解决方案?
解决方法:
我建议阅读Tasks and Back Stack.它使我对android中的活动堆栈有了更好的理解.
我的解决方案:
“调用的快速搜索对话框”将启动被调用的活动,在本示例中为MyListActivity.这使得TabActivity消失了,这就是为什么没有可见的TabWidget的原因.因此,在MyListActivity中实现了到MyTabActivity的重定向(请参阅第一个解决的问题). MyTabActivity只是将包含搜索意图的其他功能重定向到特定MyListActivity的意图中.
您现在要做的就是添加一行.在启动MyTabActivity的意图上设置FLAG_ACTIVITY_CLEAR_TOP标志.
if(Intent.ACTION_SEARCH.equals(intent.getAction())) {
String query = intent.getStringExtra(SearchManager.QUERY);
intent.setClass(context, MyTabActivity.class);
intent.setAction(MyTabActivity.ACTION_SEARCH_PROXY);
Bundle appData = intent.getBundleExtra(SearchManager.APP_DATA);
if(appData != null) {
intent.putExtras(appData);
}
intent.putExtra(Constants.ACTIVITY_TYPE, activityType);
intent.putExtra(ActivityTabView.EXTRA_SEARCH_QUERY, query);
//added line
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
context.startActivity(intent);
context.finish();
}
然后保留正常活动导航.
标签:tabactivity,search,android-activity,android 来源: https://codeday.me/bug/20191208/2093304.html