[英]Open new activity for searchview when search is clicked
每當在mainactivity
上單擊search icon
時,我都想打開一個新活動。 這個名為SearchableActivity
新活動將處理listview
中的所有相關搜索結果。 我遵循了這篇文章中描述的步驟。
這是我目前擁有的:
當用戶進入SearchView
時,我想打開SearchableActivity
。
這是我的代碼的樣子:
AndroidManifest.xml
<activity
android:name=".MainActivity"
android:launchMode="singleTop">
<!-- meta tag points to the activity which displays the results -->
<meta-data
android:name="android.app.default_searchable"
android:value=".SearchableActivity" />
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".SearchableActivity"
android:parentActivityName=".MainActivity">
<!-- Parent activity meta-data to support 4.0 and lower -->
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".MainActivity" />
<!-- meta tag and intent filter go into results activity -->
<meta-data android:name="android.app.searchable"
android:resource="@xml/searchable" />
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
</activity>
主要活動
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
menuInflater.inflate(R.menu.options_menu, menu)
val manager = getSystemService(SEARCH_SERVICE) as SearchManager
(menu?.findItem(R.id.search)?.actionView as SearchView).apply {
setSearchableInfo(manager.getSearchableInfo(ComponentName(this.context, SearchableActivity::class.java)))
}
return true
}
可搜索活動
class SearchableActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_searchable)
Toast.makeText(this@SearchableActivity, "SA created", Toast.LENGTH_LONG).show()
handleIntent(intent)
}
override fun onNewIntent(intent: Intent?) {
super.onNewIntent(intent)
if (intent !== null)
handleIntent(intent)
}
private fun handleIntent(intent: Intent) {
if (Intent.ACTION_SEARCH == intent.action) {
val query = intent.getStringExtra(SearchManager.QUERY)
Toast.makeText(this@SearchableActivity, "QUERY: $query", Toast.LENGTH_LONG).show()
}
}
}
有一種方法可以處理選項菜單項單擊它被稱為
override fun onOptionsItemSelected(item: MenuItem): Boolean {
if(item.itemId == R.id.myItemId){
startActivity(Intent(applicationContext, searchAcctivity::class.java))
}
return super.onOptionsItemSelected(item)
}
這段代碼是用 kotlin 編寫的,它在 java 中應該沒有什么不同,只需按 ctrl + o,它應該打開一個覆蓋方法列表,搜索“onOptionsItemSelected”
我不確定您要做什么,但您可以簡單地將搜索查詢傳遞給活動創建時的意圖。
首先,向您的 SearchableActivity 添加一個伴隨對象:
companion object {
private const val EXTRA_QUERY = "SEARCH_QUERY"
fun newIntent(context: Context?, query: String): Intent {
return Intent(context, SearchableActivity::class.java)
.putExtra(EXTRA_QUERY, query)
}
}
我的理解是,您想使用 MainActivity 的搜索查詢打開一個新活動,接下來是處理意圖:
private fun handleIntent(intent: Intent) {
if (Intent.ACTION_SEARCH == intent.action) {
val query = intent.getStringExtra(EXTRA_QUERY)
Toast.makeText(this@SearchableActivity, "QUERY: $query", Toast.LENGTH_LONG).show()
SearchableActivity.newIntent(this, query)
}
}
..等瞧。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.