【问题标题】:Android call function in parent of SearchActivitySearchActivity 父级中的 Android 调用函数
【发布时间】:2016-09-29 14:10:45
【问题描述】:

单击搜索结果时,我想在搜索活动的父级上调用一个函数。我怎样才能做到这一点? (我可以将父项的引用传递给接口的搜索活动吗?或者是否有可能启动搜索活动以获得结果?或者是否可以在父活动中启动搜索?)

...
<activity
        android:name=".MainActivity"
        android:configChanges="keyboardHidden|orientation|screenSize|screenLayout"
        android:keepScreenOn="true"
        android:theme="@style/AppTheme.NoActionBar">
        <meta-data
            android:name="android.app.default_searchable"
            android:value=".search.SearchAllActivity"/>
        <intent-filter>
            <action android:name="android.intent.action.SEARCH"/>
            <action android:name="android.intent.action.VIEW"/>
            <category android:name="android.intent.category.BROWSABLE"/>
            <data
                ...
        </intent-filter>
    </activity>
...
<activity
        android:name=".search.SearchAllActivity"
        android:label="@string/title_search"
        android:theme="@style/AppTheme">
        <intent-filter>
            <action android:name="android.intent.action.SEARCH"/>
        </intent-filter>
        <meta-data
            android:name="android.app.searchable"
            android:resource="@xml/searchable"/>
    </activity>

MainActivity 触发搜索。搜索完成,结果显示在 SearchAllActivity 中。

编辑: 一个明显的解决方案(对我来说很明显)是设置 setOnQueryTextListener 并手动开始搜索:

mSearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
                @Override
                public boolean onQueryTextSubmit(String query) {
                    Intent intent = new Intent().setClass(mContext, SearchAllActivity.class);
                    intent.putExtra("query", mSearchView.getQuery());

                    startActivityForResult(intent, 42);
                    return false;
                }

                @Override
                public boolean onQueryTextChange(String newText) {
                    return false;
                }
            });

在 SearchAllActivity 中:

private void handleIntent(Intent intent) {
        String query = intent.getCharSequenceExtra("query").toString();

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

        runSearch(query);
}

@Override
protected void onNewIntent(Intent intent) {
    setIntent(intent);
    handleIntent(intent);
}

但是现在建议提供者不起作用

【问题讨论】:

    标签: android search android-activity


    【解决方案1】:

    像这样调用搜索活动

     Intent intent=new Intent(MainActivity.this,SearchActivity.class);  
                    startActivityForResult(intent, 2);// Activity is started with requestCode 2  
    

    搜索后添加以下代码以将结果发送到 MainActivity

     Intent intent=new Intent();  
                        intent.putExtra("MESSAGE",message);  
                        setResult(2,intent);  
                        finish();//finishing activity  
    

    要在 MainActivity 中从 SearchActivity 中获取结果,请在 MainActivity 中添加以下代码

    @Override  
           protected void onActivityResult(int requestCode, int resultCode, Intent data)  
           {  
                     super.onActivityResult(requestCode, resultCode, data);  
                      // check if the request code is same as what is passed  here it is 2  
                       if(requestCode==2)  
                             {  
                                String message=data.getStringExtra("MESSAGE");   
                                textView1.setText(message);  
                             }  
         }   
    

    【讨论】:

    • 这是我想做的事情,但问题是,当用户在 searchview 中按下 enter 时,SearchActivity 已启动。所以我不知道如何/何时/在哪里使用“startActivityFoResult(intent, requestcode)”开始活动
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多