2013-01-01 18 views
6

Trong đơn đăng ký của tôi, tôi có thể tìm kiếm nhà cung cấp nội dung của mình, xác định hoạt động chính của tôi là hoạt động tìm kiếm mặc định trên tệp kê khai của tôi.onSuggestionNhấp vào hoạt động của tôi

<activity 
      android:name="com.pt.application.MainActivity" 
      android:label="@string/title_activity_map" 
      android:launchMode="singleTop" 
      android:theme="@style/AppTheme" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
      <intent-filter> 
       <action android:name="android.intent.action.SEARCH" /> 
      </intent-filter> 

      <meta-data 
       android:name="android.app.searchable" 
       android:resource="@xml/searchable" /> 
     </activity> 

Sau đó, tôi đã triển khai tùy chọn onSuggestionClick để cập nhật bản đồ, dựa trên đề xuất do người dùng nhấp. Chế độ xem tìm kiếm nằm trên thanh tác vụ. Vấn đề là khi người dùng nhấp vào một đề xuất, bằng cách nào đó hoạt động được tạo lại (tôi nghĩ OnPause và OnResume được gọi?). Có cách nào để ngăn chặn điều này xảy ra không? Tôi không muốn hoạt động của mình được "tạo lại" mỗi lần người dùng nhấp vào đề xuất.

Nếu cần thêm mã, vui lòng hỏi. Cảm ơn.

EDIT: Mã thêm

<?xml version="1.0" encoding="utf-8"?> 
<searchable xmlns:android="http://schemas.android.com/apk/res/android" 
    android:label="@string/app_name" 
    android:hint="@string/search_hint" 
    android:voiceSearchMode="showVoiceSearchButton|launchRecognizer" 
    android:voiceLanguageModel="web_search" 
    android:searchSuggestAuthority="com.pt.provider" 
    android:searchSuggestIntentData="content://com.pt.provider/busstop"> 
</searchable> 

On hoạt động chính của tôi:

 // Bind the Activity’s SearchableInfo to the Search View 
      searchView = (SearchView)menu.findItem(R.id.menu_search).getActionView(); 
      this.setupSearchView(); 

    private void setupSearchView() 
     { 
      // Use the Search Manager to find the SearchableInfo related 
      // to this Activity. 
      SearchManager searchManager = 
        (SearchManager)getSystemService(Context.SEARCH_SERVICE); 
      SearchableInfo searchableInfo = 
        searchManager.getSearchableInfo(getComponentName()); 
      searchView.setSearchableInfo(searchableInfo); 
      searchView.setSubmitButtonEnabled(false); 

      searchView.setOnSuggestionListener(new OnSuggestionListener() { 

       @Override 
       public boolean onSuggestionSelect(int position) { 

        return false; 
       } 

       @Override 
       public boolean onSuggestionClick(int position) { 

        // Do things 

        return false; 
       } 
      }); 
     } 
+0

hãy thêm mã hoạt động của bạn (hoặc ít nhất là tất cả các phần có liên quan mà phải làm với tìm kiếm) cũng như tìm kiếm của bạn .xml. –

+0

Đã thêm một số mã. – Gravecard

Trả lời

2

Giải Quyết câu hỏi của tôi. Thay đổi trên manifest:

Từ:

android:launchMode="singleTop" 

Để:

android:launchMode="singleTask" 
+5

Bạn cũng có thể trả về true từ onSuggestionClick(), theo cách đó Android sẽ giả định rằng phương thức của bạn đã xử lý sự kiện nhấp và sẽ không làm bất kỳ điều gì khác về nó (ví dụ: bắt đầu lại hoạt động của bạn) - đó có thể là cách "sạch hơn" (và "chính thức được đề nghị"), mặc dù phương pháp của bạn hoạt động tốt. – ToVine

Các vấn đề liên quan