2016-07-31 12 views
6

मैं एक SearchView यहाँ समझाया स्थापित करने के लिए बाहर कोशिश कर रहा हूँ ट्यूटोरियल करता है। लेकिन मेरी SearchResultActivity कुंजीपैड या SearchView के सबमिट बटन पर 'खोज' बटन पर क्लिक करने पर नहीं खुलती है।एंड्रॉयड SearchView गतिविधि नहीं खुला

मैंने Search widget on action bar doesn't trigger my search activity का पालन करने का भी प्रयास किया लेकिन मैं SearchView को दूसरी गतिविधि खोलने में असमर्थ हूं। क्या कोई मदद कर सकता है?

यहाँ मेरी मेनू है:

<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> 

खोज-विन्यास xml:

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

मैनिफ़ेस्ट:

<?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 जो अपने उपकरण पट्टी में SearchView है:

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

और 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()); 
     } 
    } 
} 

संपादित करें - यहाँ कि SearchView शामिल MainActivity के लिए मेरे लेआउट फ़ाइल है। टैग शामिल करने की सामग्री एक बच्चे के विचारों के साथ एक (खाली) सापेक्ष लेआउट है।

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

संपादित करें 2: जब मैं MainActivity के टैग में

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

लाने के लिए, MainActivity एक खोज पर फिर से lauched है (खोज या उपकरण पट्टी में कीपैड में बटन खोज परिणाम बटन है जब दब गया)। लेकिन मैं जो करना चाहता हूं वह एक नई गतिविधि शुरू करना है जो मुख्य गतिविधि नहीं है। क्या यह संभव है ?

मेरा नया प्रकट इस तरह दिखता है (MainActivty के टैग में अतिरिक्त लक्ष्य फ़िल्टर नोटिस):

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

उत्तर

0

यह एक आम गलतफहमी हो रहा है, मैं भी इस समस्या को पहली बार मैं के लिए एक नई गतिविधि चाहती थी खोज परिणाम

प्रलेखन को फिर से जांचने के बाद here, मुझे एहसास हुआ कि "खोजने योग्य सक्रियता" वास्तव में परिणाम प्रदर्शित करेगी।

<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> 

यह 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> 

तो संक्षेप, "android.app.default_searchable" मेटा टैग होना चाहिए

तो तुम MainActivity के लिए यह परिवर्तन करना होगा उस गतिविधि के भीतर जो खोज शुरू करता है। और गतिविधि जो प्रदर्शित करेगी खोज को इरादे-फ़िल्टर और खोज योग्य के लिए मेटा-डेटा की आवश्यकता होती है।

संबंधित मुद्दे