Поиск создает новые действия в TabActivity - PullRequest
8 голосов
/ 05 июля 2010

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

Вкладка Активность при создании метода:

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);
    }

1 Ответ

1 голос
/ 21 августа 2010

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

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...