Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android搜索建議(搜索聯想)

Android搜索建議(搜索聯想)

編輯:關於Android編程

Android的搜索建議,簡言之,就是說當用戶輸入某一個關鍵詞後,系統自動給出幾個含有相近關鍵詞的搜索建議。

效果圖如下:

\

 

MainActivity.java

 

package zhangphil.search;

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.provider.SearchRecentSuggestions;
import android.view.View;
import android.widget.Button;

public class MainActivity extends ActionBarActivity {

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

		Button search = (Button) findViewById(R.id.search);
		search.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View v) {
				// 發起搜索
				search();
			}
		});

		Button clear = (Button) findViewById(R.id.clear);
		clear.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View v) {
				clear();
			}
		});
	}

	private void search() {
		// 向Android系統發起搜索請求。
		this.onSearchRequested();
	}

	// onSearchRequested()方法可以重載 ,也可以不用重載。取決於是否有更多參數或數據傳遞給下一步操作。
	// 通常代碼運行邏輯需要傳遞更多數據給下一個動作時候,則可以重載此方法以完成更多數據的傳遞。
	// 如果不重載,也可以。Android系統會啟動默認的搜索框。(在UI的上方)
	@Override
	public boolean onSearchRequested() {
		Bundle bundle = new Bundle();
		bundle.putString(some key, some value);

		this.startSearch(輸入搜索的關鍵詞/** 初始化搜索框中的提示詞 */
		, true, bundle, false /** 此處若為true,則將啟動手機上的全局設置的那個搜索,比如Google搜索 */
		);

		return true;
	}

	// 清除全部歷史搜索記錄
	private void clear() {
		SearchRecentSuggestions suggestions = new SearchRecentSuggestions(this,
				ZhangPhilSuggestionProvider.AUTHORITY,
				ZhangPhilSuggestionProvider.MODE);
		// 出於用戶隱私的考慮,給APP提供清除所有用戶搜索歷史記錄的選項。
		suggestions.clearHistory();
	}
}

 

onSearchRequested將觸發Android系統自動彈出搜索框。MainActivity需要的布局文件activity_main.xml很簡單,兩個按鈕,一個觸發搜索事件,一個觸發清除搜索歷史記錄動作:


 

AndroidManifest.xml的內容:

 




    

    
        
            
                

                
            
      
            
        
        
        
            
                
            

            
        

        
    



 

SearchActivity.java文件:

package zhangphil.search;

import android.app.Activity;
import android.app.SearchManager;
import android.content.Intent;
import android.os.Bundle;
import android.provider.SearchRecentSuggestions;
import android.widget.Toast;

public class SearchActivity extends Activity {

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		Intent intent = getIntent();
		if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
			// 存關鍵詞
			saveMyRecentQuery(intent);
		}
	}

	private void saveMyRecentQuery(Intent intent) {
		// 把搜索的關鍵詞保存到Android系統的自帶的數據庫中。
		// 如無必要定制,則此過程可以使用標准、通用的方法。
		String query = intent.getStringExtra(SearchManager.QUERY);

		SearchRecentSuggestions suggestions = new SearchRecentSuggestions(this,
				ZhangPhilSuggestionProvider.AUTHORITY,
				ZhangPhilSuggestionProvider.MODE);
		suggestions.saveRecentQuery(query, null);

		Toast.makeText(this, 搜索關鍵詞: + query ,Toast.LENGTH_LONG).show();
	}
}

 

 

 

ZhangPhilSuggestionProvider.java

 

package zhangphil.search;

import android.content.SearchRecentSuggestionsProvider;

public class ZhangPhilSuggestionProvider extends
		SearchRecentSuggestionsProvider {
	// 可隨意定義一個可區別的字符串,但注意全局的唯一相同引用。
	public final static String AUTHORITY = ZhangPhil_AUTHORITY;

	public final static int MODE = DATABASE_MODE_QUERIES;

	public ZhangPhilSuggestionProvider() {
		setupSuggestions(AUTHORITY, MODE);
	}
}

 

 

searchable.xml

 

 
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved