【问题标题】:Search creates new activities in TabActivity搜索在 TabActivity 中创建新活动
【发布时间】:2011-03-11 18:43:45
【问题描述】:

我想在 Android 上开发一个选项卡式应用程序。同时,我希望搜索功能出现在某些选项卡上。为此,我在清单文件中声明了一些活动并将它们添加到 TabHost。但问题是,当我进行搜索时,它会调用驻留在选项卡内容中的当前活动的 onCreate() 方法。我想要的是让 searchManager 调用 onNewIntent() 方法,这样就不会创建新的活动,我可以处理现有活动中的搜索。为了更清楚,我发布了清单和 TabActivity 源文件:

清单文件的一部分:

  <activity 
   android:name="KarniyarikTabsWidget" 
   android:label="@string/app_name"
   android:theme="@android:style/Theme.NoTitleBar" 
   android:launchMode="singleTop">
   <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
   </intent-filter>
  </activity>
  <activity android:name="UrunTab"
   android:theme="@android:style/Theme.NoTitleBar"
   android:launchMode="singleTop">
   <intent-filter>
    <action android:name="android.intent.action.SEARCH" />
   </intent-filter>
   <meta-data android:name="android.app.searchable"
    android:resource="@xml/searchable" />
  </activity>
  <activity android:name="ArabaTab" android:theme="@android:style/Theme.NoTitleBar"
   android:launchMode="singleTop">
   <intent-filter>
    <action android:name="android.intent.action.SEARCH" />
   </intent-filter>
   <meta-data android:name="android.app.searchable"
    android:resource="@xml/searchable" />
  </activity>
  <activity android:name="GecmisTab" android:theme="@android:style/Theme.NoTitleBar"
   android:launchMode="singleTop">
  </activity>
  <activity android:name="HakkindaTab" android:theme="@android:style/Theme.NoTitleBar"
   android:launchMode="singleTop">
  </activity>

Tab Activity onCreate 方法:

public class KarniyarikTabsWidget extends TabActivity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Resources res = getResources(); // Resource object to get Drawables
        TabHost tabHost = getTabHost();  // The activity TabHost
        TabHost.TabSpec spec;  // Resusable TabSpec for each tab

        // Initialize a TabSpec for each tab and add it to the TabHost
        spec = tabHost.newTabSpec("UrunTab")
         .setIndicator("Ürün",res.getDrawable(R.drawable.product))
         .setContent(new Intent(this, UrunTab.class));
        tabHost.addTab(spec);

        //Do the same for other tabs
        spec = tabHost.newTabSpec("ArabaTab")
          .setIndicator("Araba",res.getDrawable(R.drawable.car))
          .setContent(new Intent(this, ArabaTab.class));
        tabHost.addTab(spec);

        //Do the same for other tabs
        spec = tabHost.newTabSpec("GecmisTab")
          .setIndicator("Geçmiş",res.getDrawable(R.drawable.history))
          .setContent(new Intent(this, GecmisTab.class));
        tabHost.addTab(spec);

        //Do the same for other tabs
        spec = tabHost.newTabSpec("HakkindaTab")
         .setIndicator("Hakkında",res.getDrawable(R.drawable.about))
          .setContent(new Intent(this, HakkindaTab.class));
        tabHost.addTab(spec);
    }

【问题讨论】:

标签: android search


【解决方案1】:

不确定您是否找到了答案,但我遇到了一个相关问题,因为我试图让搜索 UI 从 tabactivity 的菜单中显示出来(即,无论哪个搜索都应该显示选项卡处于活动状态),并且它没有显示出来。经过大量研究并仔细阅读'Search' article,我注意到以下段落:

默认情况下,应用程序的每个 Activity 都没有搜索对话框。相反,只有当用户从应用程序的可搜索上下文中调用搜索时,才会向用户显示搜索对话框。可搜索上下文是您在清单文件中声明可搜索元数据的任何活动。例如,可搜索的 Activity 本身(在上面的清单 sn-p 中声明)是可搜索的上下文,因为它包含定义可搜索配置的元数据。默认情况下,应用程序中的任何其他 Activity 都不是可搜索的上下文,因此不会显示搜索对话框。但是,您可能确实希望其他活动中的搜索对话框可用(并在用户执行搜索时启动可搜索活动)。你完全可以做到这一点。

您还可以控制哪些活动提供更精细的搜索。要仅将单个 Activity 指定为可搜索上下文,请将带有“android.app.default_searchable”名称的 Activity 放在相应元素内(而不是元素内)。虽然不常见,但您也可以创建多个可搜索 Activity 并在应用程序的不同上下文中提供每个 Activity,方法是在每个元素中声明不同的可搜索 Activity,或者为整个应用程序声明一个默认可搜索 Activity,然后用某些活动中的元素。 (如果您想要搜索无法由同一可搜索 Activity 处理的不同数据集,您可以这样做,具体取决于当前打开的 Activity。)

简而言之,您必须拥有用于调用onSearchRequested() 的特定活动的搜索元数据。不仅如此,这些其他活动中的元数据的名称应为 default_searchable 并提及搜索活动,而不是 xml 可搜索文件,如下所示:

<meta-data android:name="android.app.default_searchable"
                   android:value=".SearchScreen" />

注意到您在两个地方的搜索元数据有误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-06
    • 1970-01-01
    • 1970-01-01
    • 2021-03-18
    相关资源
    最近更新 更多