Поиск создает новые операции в TabActivity

Я хочу разработать приложение с вкладками на 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>

Действие вкладки 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);
    }
8
задан Cœur 3 September 2017 в 16:23
поделиться

1 ответ

Не уверен, что вы нашли ответ на этот вопрос, но я был возникла связанная с этим проблема, заключающаяся в том, что я пытался отобразить пользовательский интерфейс поиска из меню активности вкладок (т. е. поиск должен отображаться независимо от того, какая вкладка активна), и он не отображался. После небольшого исследования и внимательного прочтения статьи «Поиск» я заметил следующий абзац:

Диалог поиска по умолчанию не доступен для всех действий вашего приложения. Скорее, диалоговое окно поиска представляется пользователям только тогда, когда они вызывают поиск из доступного для поиска контекста вашего приложения. Контекст с возможностью поиска - это любое действие, для которого вы объявили доступные для поиска метаданные в файле манифеста. Например, само действие с возможностью поиска (объявленное в приведенном выше фрагменте манифеста) является доступным для поиска контекстом, поскольку оно включает метаданные, которые определяют доступную для поиска конфигурацию. Любое другое действие в вашем приложении по умолчанию не является контекстом для поиска и, следовательно, не отображает диалоговое окно поиска. Однако вы, вероятно, хотите, чтобы диалоговое окно поиска было доступно из других ваших действий (и для запуска действия с возможностью поиска, когда пользователь выполняет поиск). Вы можете сделать именно это.

Вы также можете контролировать, какие действия обеспечивают поиск на более детальном уровне. Чтобы указать только отдельное действие в качестве контекста с возможностью поиска, поместите его с "android.app."default_searchable "внутри соответствующего элемента (а не внутри элемента). Хотя это редкость, вы также можете создать несколько действий с возможностью поиска и предоставить каждое из них в разных контекстах вашего приложения, либо объявив разные действия с возможностью поиска в каждом элементе, либо объявив Activity с возможностью поиска по умолчанию для всего приложения, а затем переопределив его элементом внутри определенных действий (вы можете сделать это, если хотите искать разные наборы данных, которые не могут быть обработаны одним и тем же действием с возможностью поиска, в зависимости от текущего открытого Activity.)

Короче говоря, вам понадобятся метаданные поиска для конкретного действия, из которого вы вызываете onSearchRequested () . Мало того, метаданные в этих других действиях должно иметь имя default_searchable и упоминать поисковую активность, а не XML-файл с возможностью поиска, например:

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

Заметили, что метаданные поиска неверны в двух местах.

1
ответ дан 6 December 2019 в 02:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: