2015-05-09 138 views
1

我想用建議進行搜索。運行該應用程序,並在我的下面日誌Log.d("states","a onCreate")Log.d("states",arg0.toString())Log.d("states",query)Log.d("states","searchactivity onCreate")執行的搜索框中鍵入非字符串後安卓搜索與建議

我該怎麼做才能做到這樣做在a.java中的query()方法或b.java中的onCreate()方法被調用?

請不要發送給我的谷歌開發人員文件,它非常混亂。

MainActivity.java

package com.example.searchapp; 


import android.app.ActionBar; 
import android.app.Activity; 

import android.app.SearchManager; 
import android.content.Context; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.Menu; 
import android.view.MenuInflater; 
import android.widget.SearchView; 

public class MainActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     Log.d("states","MainActivity onCreate"); 

     ActionBar actionBar = getActionBar(); 
     //actionBar.setDisplayShowHomeEnabled(false); 
     actionBar.setDisplayShowTitleEnabled(false); 

    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the options menu from XML 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.options_menu, menu); 

     // Get the SearchView and set the searchable configuration 
     SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); 
     SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView(); 
     // Assumes current activity is the searchable activity 
     searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); 
     searchView.setIconifiedByDefault(false); // Do not iconify the widget; expand it by default 
     //searchView.setSubmitButtonEnabled(true); 
     searchView.setQueryRefinementEnabled(true); 

     return true; 
    } 

} 

a.java

package com.example.searchapp; 

import android.content.ContentProvider; 
import android.content.ContentValues; 
import android.database.Cursor; 
import android.net.Uri; 
import android.util.Log; 

public class a extends ContentProvider{ 

    @Override 
    public int delete(Uri arg0, String arg1, String[] arg2) { 
     // TODO Auto-generated method stub 
     return 0; 
    } 

    @Override 
    public String getType(Uri arg0) { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    @Override 
    public Uri insert(Uri arg0, ContentValues arg1) { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    @Override 
    public boolean onCreate() { 
     // TODO Auto-generated method stub 
     Log.d("states","a onCreate"); 
     return true; 
    } 

    @Override 
    public Cursor query(Uri arg0, String[] arg1, String arg2, String[] arg3, 
      String arg4) { 
     // TODO Auto-generated method stub 
     Log.d("states",arg0.toString()); 
     String query = arg0.getLastPathSegment().toLowerCase(); 
     Log.d("states",query); 
     return null; 
    } 

    @Override 
    public int update(Uri arg0, ContentValues arg1, String arg2, String[] arg3) { 
     // TODO Auto-generated method stub 
     return 0; 
    } 

} 

b.java

package com.example.searchapp; 

import android.app.Activity; 
import android.app.SearchManager; 
import android.content.Intent; 
import android.os.Bundle; 
import android.util.Log; 

public class b extends Activity { 


    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     Log.d("states","searchactivity onCreate"); 
     Intent intent = getIntent(); 
     if (Intent.ACTION_SEARCH.equals(intent.getAction())) { 
      String query = intent.getStringExtra(SearchManager.QUERY); 

      Log.d("states",query); 

     } 
    } 

} 

AndroidManifest.xml中

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.searchapp" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="14" 
     android:targetSdkVersion="20" /> 

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

     <provider 
      android:name=".a" 
      android:authorities="com.example.searchapp.searchsuggestion"> 
     </provider> 

     <activity 
      android:name=".MainActivity" 
      android:label="@string/app_name" > 

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

     </activity> 
     <activity android:name=".b"> 
      <intent-filter> 
       <action android:name="android.intent.action.SEARCH" /> 
      </intent-filter> 
      <meta-data android:name="android.app.searchable" 
         android:resource="@xml/searchable"/> 
     </activity> 

    </application> 

</manifest> 

searchable.xml

<?xml version="1.0" encoding="utf-8"?> 
<searchable xmlns:android="http://schemas.android.com/apk/res/android" 
    android:label="app_label" 
    android:hint="Search in tags" 
    android:searchSuggestAuthority="com.example.searchapp.searchsuggestion" 
    android:searchSuggestIntentAction="android.intent.action.VIEW" > 

</searchable> 
+0

沒有人可以幫我 ?! – saeid

回答

0

我想在你的一類,你必須實現的getType() - 方法:

private UriMatcher uriMatcher; 

@Override 
public boolean onCreate() { 
    final String authority = "com.example.searchapp.searchsuggestion"; 
    uriMatcher = new UriMatcher(UriMatcher.NO_MATCH); 
    uriMatcher.addURI(authority, SearchManager.SUGGEST_URI_PATH_QUERY, SEARCH_SUGGEST); 
    uriMatcher.addURI(authority, SearchManager.SUGGEST_URI_PATH_QUERY + "/*", SEARCH_SUGGEST); 
    return true; 
} 

@Override 
public String getType(Uri uri) { 
    switch (uriMatcher.match(uri)) { 
     case SEARCH_SUGGEST: 
      return SearchManager.SUGGEST_MIME_TYPE; 
     default: 
      throw new IllegalArgumentException("Unknown URL " + uri); 
    } 
} 
+0

你測試過我的代碼和你的解決方案嗎?你的解決方案不適合我:( – saeid