2013-10-24 16 views
11

Tôi đang sử dụng giao diện Tìm kiếm trong andriod và theo hướng dẫn android tôi đã thiết lập giao diện.searchView setQuery không hoạt động

Tôi tạo SearchableActivity để xử lý cả người dùng nhập kết quả tìm kiếm.

Bây giờ tôi gặp một vấn đề trong đó khi người dùng nhập nội dung vào số SearchView và nhấn phím tìm kiếm, requset Tìm kiếm sẽ được gửi, sau đó tôi sẽ nhận chuỗi truy vấn và thực hiện tìm kiếm, nhưng tại thời điểm này, văn bản trong SearchView đã được thay đổi thành giá trị mặc định SearchHit trong khi tôi muốn nó là chuỗi truy vấn.

Vì vậy, tôi đã cố gắng sử dụng searchView.setQuery(query, false);, nhưng nó không hoạt động, vấn đề là gì?

Các mã Hoạt động cốt lõi:

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.map_activity_layout); 

    Log.d("map", "create"); 
    handleIntent(getIntent()); 
} 

public void onNewIntent(Intent intent) { 
    setIntent(intent); 
    handleIntent(intent); 
} 

private void handleIntent(Intent intent) { 
    Log.d("map", "handleIntent"); 
    if (Intent.ACTION_SEARCH.equals(intent.getAction())) { 
     String query = intent.getStringExtra(SearchManager.QUERY); 
     //try search 
     Log.d("map", "search and set query:" + query); 
     searchView.setQuery(query, false); // reset the value in of the SearchView 
    } 
} 

Các AndroidManifest.xml:

<activity 
     android:name=".ui.MapActivity" 
     android:launchMode="singleTop"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
      <action android:name="android.intent.action.SEARCH" /> 
     </intent-filter> 
     <meta-data 
      android:name="android.app.searchable" 
      android:resource="@xml/searchable" /> 
    </activity> 
+0

bạn có giải quyết được sự cố không. ngay cả khi tôi cũng tấn công vào cùng một điểm. –

Trả lời

1

Dường như khi mục đích với hành động Intent.ACTION_SEARCH được nhận, phương pháp sau đây sẽ được gọi là:

handleIntent(); 

onCreateOptionsMenu(); 

handleIntent sẽ chạy trước onCreateOptionsMenu.

Đồng thời, mọi người đã từng thiết lập searchView tại số onCreateOptionsMenu.

Điều đó có nghĩa là menu tùy chọn sẽ được tăng thêm lại và searchView sẽ được xây dựng lại, khi đó tất cả cài đặt trong handleIntent sẽ không hoạt động.

Tôi nghĩ đây là lý do.

Vui lòng sửa lỗi nếu tôi sai.

11

tôi đề nghị bạn để trì hoãn việc thiết lập cho đến khi vòng lặp sự kiện tiếp theo (thêm nó vào hàng đợi thông điệp), do đó các mã có thể trông như sau:

private void handleIntent(Intent intent) { 
    if (Intent.ACTION_SEARCH.equals(intent.getAction())) { 
     final String query = intent.getStringExtra(SearchManager.QUERY); 
     searchView.post(new Runnable() { 

      @Override 
      public void run() { 
       // Important! Make sure searchView has been initialized 
       // and referenced to the correct (current) SearchView. 
       // Config changes (e.g. screen rotation) may make the 
       // variable value null. 
       searchView.setQuery(query, false); 
      } 
     }; 
    } 
} 
+3

Chỉ câu trả lời hoạt động đáng tin cậy – Sourabh

11

này không hoạt động

mSearchView.setQuery(mKeyword, true); 
    MenuItemCompat.expandActionView(mMenuSearch); 

này không

MenuItemCompat.expandActionView(mMenuSearch); 
    mSearchView.setQuery(mKeyword, true); 

có vẻ như nó chỉ nhớ nó sau khi bạn mở rộng quan điểm hành động. Tôi đang sử dụng MenuItemCompat chỉ để tương thích ngược

+2

không hoạt động đối với tôi, việc trì hoãn đã làm – Mene

+0

mSearchView.onActionViewExpanded(); mSearchView.setQuery ("", true); đã làm việc cho tôi – Graeme

1

cần phải đặt mã trong bài handler với MenuItemCompat

inflater.inflate(R.menu.menu_my_team, menu); 
    // search manager integration for search widget 
    SearchManager searchManager = (SearchManager) getActivity() 
      .getSystemService(Context.SEARCH_SERVICE); 
    final MenuItem searchMenuItem = menu.findItem(R.id.action_search); 
    // MenuItem helpTutorialMenuItem = menu.findItem(R.id.action_help); 
    mSearchView = (SearchView) MenuItemCompat.getActionView(searchMenuItem); 

    mSearchView.setSearchableInfo(searchManager 
      .getSearchableInfo(getActivity().getComponentName())); 

    mSearchView.setQueryHint("Search by"); 

    if (!TextUtils.isEmpty(queryText)) { 
     mSearchView.post(new Runnable() { 
      @Override 
      public void run() { 
       MenuItemCompat.expandActionView(searchMenuItem); 
       mSearchView.setQuery(queryText, false); 
      } 
     }); 
    } 
    mSearchView.clearFocus(); 
+0

Điều này sẽ được đánh dấu là câu trả lời. – Max

+0

Nên kéo 'MenuItemCompat.expandActionView (searchMenuItem);' chạy và thêm trước khi đăng bài. Điều này đã luôn luôn làm việc cho tôi, nhưng nhận thấy nó không phải là trên một thiết bị Nougat tôi đã thử nghiệm. –

+0

Đã hoạt động hoàn hảo – Akshay

0

Trong trường hợp của tôi, nó đã không làm việc vì đoạn tôi đang ở không còn gắn liền với cửa sổ. Di chuyển nó đến phía trên, nơi tôi đổi chỗ trong đoạn kết quả tìm kiếm mới đã sửa nó.

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