не дать компоненту поиска MapView Android создавать новые намерения - PullRequest
1 голос
/ 12 марта 2011

Я реализовал версию Google Searchable Dictionary , и у меня возникли некоторые проблемы.

Я реализую в MapView действие, в котором у меня есть базовый ItemizedOverlay, который я хочу найти. Я заменил данные на те же, что и на ItemizedOverlay, и все, кажется, запрашивает просто отлично.

Однако, когда я выбираю элемент поиска из списка, первоначальное намерение, которое порождало поисковое действие, кажется, обрабатывает событие, и новое намерение MapView порождает и делает то же самое (поэтому, если бы я нажал " кнопку "Назад", я возвращаюсь к дублирующемуся mapView).

Мой класс Mapview выглядит так:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.my_map);

    initializeComponents();

    addOverlays();

    Intent intent = getIntent();

    if (Intent.ACTION_VIEW.equals(intent.getAction())) {
        // handles a click on a search suggestion; launches activity to show word
        int lat, lon;
        Uri uri = intent.getData();
        Cursor c = getContentResolver().query(uri, null, null, null, null);
        try {
            c.moveToFirst();
            lat = Integer.parseInt(c.getString(2));
            lon = Integer.parseInt(c.getString(6));
        } finally {
            c.close();
        }

        //this is the ItemizedOverlay that holds the building icons
        buildingIcons.onTap(new GeoPoint(lat, lon), mapView);

        Toast.makeText(this, "you searched for " + lat + ", " + lon, Toast.LENGTH_LONG).show();
    } 
}

Сумасшедшая вещь в том, что уведомление Toast работает просто отлично - оно дает мне широту / долготу точки (и да, я знаю, что индекс столбца - не лучший способ получить его). Любые идеи о том, почему создается второе намерение MapView?

Если вам это нужно, вот файл searchable.xml:

<searchable xmlns:android="http://schemas.android.com/apk/res/android"
    android:label="@string/search_label"
    android:hint="@string/search_hint"
    android:searchSettingsDescription="@string/settings_description"
    android:searchSuggestAuthority=".map.DictionaryProvider"
    android:searchSuggestIntentAction="android.intent.action.VIEW"
    android:searchSuggestIntentData="content://.map.DictionaryProvider/dictionary"
    android:searchSuggestSelection=" ?"
    android:searchSuggestThreshold="1"
    android:includeInGlobalSearch="true"
    >

1 Ответ

0 голосов
/ 13 марта 2011

Ладно, разобрался.В документации четко указано,

По умолчанию доступная для поиска активность получает намерение ACTION_SEARCH с вызовом onCreate (), и новый экземпляр действия переносится в верхнюю часть стека активности.Теперь в стеке Activity есть два экземпляра вашей активности с возможностью поиска (поэтому нажатие клавиши BACK возвращает к предыдущему экземпляру Activity с возможностью поиска, а не к выходу Activity с возможностью поиска).

Если вы установили android: launchModeв «singleTop», то доступная для поиска активность получает ACTION_SEARCH Intent с вызовом onNewIntent (Intent), передавая здесь новое ACTION_SEARCH Intent.

Мне нужно было переопределить метод onNewIntent для обработкипоисковое событие.Теперь все отлично работает!

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