ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

android-是否有很好的解决方案,分别在TabActivity中搜索选项卡中的每个活动?

2019-12-08 18:28:15  阅读:264  来源: 互联网

标签:tabactivity search android-activity android


我的活动导航存在问题,搜索效果很好.

活动层次结构如下所示:

                              /  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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有