【问题标题】:Open new activity for searchview when search is clicked单击搜索时为搜索视图打开新活动
【发布时间】:2020-04-10 21:02:31
【问题描述】:

每当在mainactivity 上单击search icon 时,我都想打开一个新活动。这个名为SearchableActivity 的新活动将处理listview 中的所有相关搜索结果。我已按照post 中描述的步骤进行操作。

这是我目前拥有的:

我想在用户输入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>

MainActivity

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()
        }
    }
}

【问题讨论】:

    标签: android android-fragments kotlin searchview android-search


    【解决方案1】:

    有一种方法可以处理选项菜单项单击它被称为

    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”

    【讨论】:

      【解决方案2】:

      我不确定您要做什么,但您可以简单地将搜索查询传递给创建活动的意图。

      首先,将伴随对象添加到您的 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)            
          }
        }
      

      ..瞧瞧。

      【讨论】:

        猜你喜欢
        • 2023-03-14
        • 1970-01-01
        • 1970-01-01
        • 2015-11-19
        • 2017-02-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多