2016-07-31 26 views
6

tôi đang cố gắng ra các hướng dẫn để thiết lập một SearchView giải thích ở đây: https://developer.android.com/training/search/setup.htmlAndroid - SearchView không Hoạt động mở

Tôi đã tạo ra một menu với một SearchView & cấu hình SearchView. Nhưng SearchResultActivity của tôi không mở khi nhấp vào nút 'tìm kiếm' trên bàn phím hoặc nút gửi của SearchView.

Tôi cũng đã cố gắng theo dõi Search widget on action bar doesn't trigger my search activity nhưng tôi không thể làm cho SearchView mở Hoạt động thứ hai. Ai đó có thể giúp đỡ?

Đây là trình đơn của tôi:

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    tools:context="com.sample.searchbarapplication.MainActivity"> 
    <item 
     android:id="@+id/action_search" 
     android:orderInCategory="100" 
     android:title="@string/action_search" 
     android:icon="@drawable/ic_search_white_24dp" 
     app:actionViewClass="android.support.v7.widget.SearchView" 
     app:showAsAction="collapseActionView|ifRoom" /> 
</menu> 

Các xml tìm kiếm cấu hình:

<?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" /> 

Manifest:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.sample.searchbarapplication"> 

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 

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

     <activity 
      android:name=".MainActivity" 
      android:label="@string/app_name" 
      android:theme="@style/AppTheme.NoActionBar"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 

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

     </activity> 

     <activity android:name=".SearchResultActivity" 
      android:launchMode="singleTop"> 

      <intent-filter> 
       <action android:name="android.intent.action.SEARCH" /> 
      </intent-filter> 

     </activity> 

    </application> 

</manifest> 

MainActivity trong đó có các SearchView trong thanh công cụ của nó:

public class MainActivity extends AppCompatActivity { 
ActionMenuView mActionMenuView; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 

    setSupportActionBar(toolbar); 
    getSupportActionBar().setTitle(null); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.menu_main, menu); 

    SearchManager searchManager = 
      (SearchManager) getSystemService(Context.SEARCH_SERVICE); 
    SearchView searchView = 
      (SearchView) menu.findItem(R.id.action_search).getActionView(); 
    searchView.setSearchableInfo(
      searchManager.getSearchableInfo(getComponentName())); 

    searchView.setIconifiedByDefault(false); 
    searchView.setSubmitButtonEnabled (true); 

    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    int id = item.getItemId(); 
    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_search) { 
     Log.v("click","click"); 
    } 

    return true; 
} 
} 

Và SearchResultActivity.java:

public class SearchResultActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_search); 
     handleIntent(getIntent()); 
    } 

    @Override 
    protected void onNewIntent(Intent intent) { 
     super.onNewIntent(intent); 
     handleIntent(intent); 
    } 

    private void handleIntent(Intent intent) { 
     Log.v("query2","query"); 
     if (Intent.ACTION_SEARCH.equals(intent.getAction())) { 
      String query = intent.getStringExtra(SearchManager.QUERY); 
      //use the query to search your data somehow 
      Log.v("query",query.toString()); 
     } 
    } 
} 

Edit - Đây là file layout của tôi cho MainActivity chứa SearchView. Nội dung của thẻ bao gồm là một RelativeLayout (trống) không có chế độ xem con.

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true" 
    tools:context="com.sample.searchbarapplication.MainActivity"> 

    <android.support.design.widget.AppBarLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:theme="@style/AppTheme.AppBarOverlay"> 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      android:background="?attr/colorPrimary" 
      app:popupTheme="@style/AppTheme.PopupOverlay" > 

     </android.support.v7.widget.Toolbar> 

    </android.support.design.widget.AppBarLayout> 

    <include layout="@layout/content_main" /> 

</android.support.design.widget.CoordinatorLayout> 

Chỉnh sửa 2: Khi tôi mang

<intent-filter> 
       <action android:name="android.intent.action.SEARCH" /> 
      </intent-filter> 

vào thẻ của MainActivity, các MainActivity được lauched một lần nữa trên một tìm kiếm (khi nút tìm kiếm trong bàn phím hoặc nút kết quả tìm kiếm trên thanh công cụ là ép). Nhưng điều tôi muốn làm là bắt đầu một Hoạt động mới không phải là MainActivity. Điều này có thể không?

manifest mới của tôi trông như thế này (chú ý các bộ lọc ý định thêm trong thẻ MainActivty của):

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.sample.searchbarapplication"> 

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 
     <meta-data 
      android:name="android.app.default_searchable" 
      android:value=".MainActivity" /> 

     <activity 
      android:name=".MainActivity" 
      android:label="@string/app_name" 
      android:theme="@style/AppTheme.NoActionBar"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 

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

      <intent-filter> 
       <action android:name="android.intent.action.SEARCH" /> 
      </intent-filter> 

     </activity> 

     <activity android:name=".SearchResultActivity"> 

     </activity> 

    </application> 

</manifest> 

Trả lời

0

này có vẻ là một sự hiểu lầm phổ biến, tôi cũng có vấn đề này lần đầu tiên tôi muốn có một hoạt động mới cho kết quả tìm kiếm.

Sau khi kiểm tra lại tài liệu here, tôi nhận ra rằng "SearchableActivity" thực sự là một trong đó sẽ hiển thị kết quả.

Vì vậy, bạn sẽ phải thay đổi này cho MainActivity:

<activity 
     android:name=".MainActivity" 
     android:theme="@style/AppTheme.NoActionBar"> 
     <meta-data 
      android:name="android.app.default_searchable" 
      android:value=".SearchResultActivity"/> 

     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER"/> 
     </intent-filter> 
</activity> 

này cho SearchResultActivity:

<activity android:name=".SearchResultActivity"> 
     <intent-filter> 
      <action android:name="android.intent.action.SEARCH" /> 
     </intent-filter> 

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

Vì vậy, tóm tắt, các "android.app.default_searchable" meta-tag phải trong hoạt động bắt đầu tìm kiếm. Và hoạt động sẽ hiển thị tìm kiếm cần bộ lọc ý định và siêu dữ liệu cho tìm kiếm được.

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