标签: android-searchmanager

多选择可搜索ListView

好的我有一个多选ListView工作正常.我检查联系人的框(保存在String []中)并可以返回值.因为有些人有一堆联系我想创建一个搜索栏,有点像Android手机书的库存.我创建了一个EditText并将其对齐在我的列表上方.我在StackOverflow上找到了过滤代码,它运行得非常好.

我的问题:

当您过滤某些人的名字,并选择名称时,当您从EditText退格或继续键入时,不会保存您选择的名称的正确位置.例如,如果我开始键入"Adam"并进入"Ada"并选择它,如果我退格键入"Carol",则选择"Ada"所处的位置.它收集了"亚当"在点击时所处的位置(比方说2),当列表恢复时,检查位置(2),即使亚当不在那里.我需要一种方法来收集名称..然后当再次恢复或搜索列表时,将检查NAME Adam,而不是之前的位置亚当.除了创建大量数组之外,我绝对没有任何想法,并且可以真正使用一些帮助.下面是我正在使用的一些代码:

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


        myListView = (ListView)findViewById(android.R.id.list);
        search_EditText = (EditText) findViewById(R.id.search_EditText);
        search_EditText.addTextChangedListener(filterTextWatcher);

        adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_multiple_choice, ContactsList); 
        setListAdapter(adapter);

        myListView.setItemsCanFocus(false);
        getListView().setChoiceMode(2);
        myListView.setTextFilterEnabled(true);
        myListView.setFastScrollEnabled(true);
        myListView.invalidate();
}

    private TextWatcher filterTextWatcher = new TextWatcher() {
        public void afterTextChanged(Editable s) {

        }

        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {

        }

        public void onTextChanged(CharSequence s, int start, int before,
                int count) {

            adapter.getFilter().filter(s);

        }

    };
Run Code Online (Sandbox Code Playgroud)

android android-searchmanager multiple-choice android-listview

11
推荐指数
1
解决办法
3584
查看次数

可以在Android应用中使用多个SearchRecentSuggestionsProvider类吗?

我在我的应用程序中使用SearchManager实现了两个不同的搜索活动.一个是整个应用程序的默认搜索,另一个仅用于一个活动.这两个搜索执行不同数据的查找,并且在两个不同的搜索中共享搜索历史没有意义.这两个不同的搜索在应用程序中功能正常,我的问题是最近的搜索历史.

问题是在应用程序中定义了两个不同的SearchRecentSuggestionsProvider类,但是在一个搜索的最近搜索建议历史记录中显示了一个搜索.我已阅读开发指南中的SearchManager主题,但未看到有关多个建议提供程序的任何信息.

以下是AndroidManifest.xml中节点中的两个提供程序:

<provider android:name=".SearchOneRecentSuggestionsProvider"
 android:authorities="com.company.SearchOneRecentSuggestionsProvider"></provider>
<provider android:name=".SearchTwoRecentSuggestionsProvider"
    android:authorities="com.company.SearchTwoRecentSuggestionsProvider"></provider>
Run Code Online (Sandbox Code Playgroud)

这是SearchOneRecentSuggestionsProvider.java中定义的类:

package com.company;

import android.content.SearchRecentSuggestionsProvider;

public class SearchOneRecentSuggestionsProvider extends SearchRecentSuggestionsProvider {
     public final static String AUTHORITY = "com.company.SearchOneRecentSuggestionsProvider";
     public final static int MODE = DATABASE_MODE_QUERIES;

     public SearchOneRecentSuggestionsProvider() {
      setupSuggestions(AUTHORITY, MODE);
     }
    }
Run Code Online (Sandbox Code Playgroud)

(SearchTwoRecentSuggestionsProvider类看起来完全相同,除了替换One with Two并且在它自己的SearchTwoRecentSuggestionsProvider.java文件中.)

以下是搜索建议数据库中的内容(位于/data/data/com.company/databases/suggestions.db):

# sqlite3 suggestions.db
SQLite version 3.5.9
Enter ".help" for instructions
sqlite> .tables
android_metadata  suggestions
sqlite> .schema suggestions
CREATE TABLE suggestions (_id INTEGER PRIMARY KEY,display1 TEXT UNIQUE ON CONFLICT REPLACE,query TEXT,date LONG); …
Run Code Online (Sandbox Code Playgroud)

search android android-searchmanager

9
推荐指数
1
解决办法
1906
查看次数

如何使用默认浏览器在谷歌上搜索字符串

我想实现一个搜索功能,打开默认浏览器并搜索传递的字符串

public void searchOnGoogle(String keywords){
---
}
Run Code Online (Sandbox Code Playgroud)

有没有办法使用意图过滤器或我必须自己实现一切?

android google-api android-intent android-searchmanager

9
推荐指数
1
解决办法
1870
查看次数

如果用户按下设备的搜索按钮,则在ActionBar中显示SearchWidget

我按照Android API指南中的说明设置了SearchWidget .它在操作栏中正确显示放大镜图标,如果我单击它,它会在操作栏(具有深色背景的输入字段)中启动搜索窗口小部件.

但是,如果我按下虚拟设备的搜索按钮,则会启动另一个搜索字段:它具有白色背景,并且不会调用我指定的回调方法.

所以我把它添加到我的MainActivity类:

public boolean onSearchRequested() {
    SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
    searchView.setIconified(!searchView.isIconified());
    return false;
}
Run Code Online (Sandbox Code Playgroud)

搜索小部件的设置与文档中描述的完全相同:

SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
searchView.setIconifiedByDefault(false);
searchView.setOnQueryTextListener(new CustomSearchQueryTextListener());
Run Code Online (Sandbox Code Playgroud)

我的searchable.xml:

<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
    android:label="@string/app_name">
</searchable>
Run Code Online (Sandbox Code Playgroud)

和AndroidManifest.xml:

    <activity
        android:name="MainActivity"
        android:label="@string/app_name"
        android:launchMode="singleTask"
        android:uiOptions="splitActionBarWhenNarrow" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.SEARCH" />
        </intent-filter>
        <meta-data android:name="android.app.searchable" android:resource="@xml/searchable"/>
    </activity>
Run Code Online (Sandbox Code Playgroud)

我尝试使用setIconfied()方法的原因是,在Android API指南中,它说"切换搜索框可见性的能力":

"默认情况下,搜索小部件是"图标化",意味着它仅由搜索图标(放大镜)表示,并在用户触摸时展开以显示搜索框.如上所示,您可以显示搜索默认情况下,通过调用setIconifiedByDefault(false).您还可以通过调用setIconified()来切换搜索小部件外观."

我也试着打电话startSearch("", false, null, false);但这会带来与白色背景相同的搜索字段.

所以我的问题是:如果用户按下设备的搜索按钮,是否可以在操作栏中启动搜索小部件,即执行与单击搜索菜单项完全相同的操作?

android android-widget android-searchmanager

8
推荐指数
1
解决办法
3672
查看次数

Android searchview的建议来自网络

SearchView在Actionbar中有一个,我希望从服务中获取建议.

我在android中看过一个示例Samples Searchable Dictionary.但是它正在从本地数据库加载结果.

我明白了,有必要使用Content Provider.但我想知道何时从Web服务获取结果.我的意思是什么时候打网络.请任何人都可以帮忙.

android android-searchmanager

8
推荐指数
1
解决办法
462
查看次数

ActionBar上的Android SearchView,检测点击搜索

在我的应用程序中,与许多其他应用程序一样,有一个常见的搜索小部件(http://developer.android.com/guide/topics/search/search-dialog.html#UsingSearchWidget).

只有当按下键盘上的搜索按钮时,我才会更改片段(并将搜索词传递给它).

我试过了

searchView.setOnSearchClickListener(new OnClickListener() { 
@Override public void onClick(View v) { 
} });
Run Code Online (Sandbox Code Playgroud)

但是当你按下操作栏上的按钮时会触发它,它会解锁搜索输入,而不会在点击键盘按钮搜索时触发.

你知道怎么可能吗?

android android-searchmanager android-search

8
推荐指数
1
解决办法
1万
查看次数

使用SUGGEST_COLUMN_ICON_1的网址进行搜索建议

我有一个SearchManager设置,其中一个建议下拉列表将显示为用户键入.结果来自我的服务器(http).我想在每个选项中显示一个图标(如果文件确实存在).

查看文档,我看到常量列的选项SUGGEST_COLUMN_ICON_1允许这些选项:

Column name for suggestions cursor. Optional. If your cursor includes this column, then all suggestions will be provided in a format that includes space for two small icons, one at the left and one at the right of each suggestion. The data in the column must be a resource ID of a drawable, or a URI in one of the following formats:

content (SCHEME_CONTENT)
android.resource (SCHEME_ANDROID_RESOURCE)
file (SCHEME_FILE) 
Run Code Online (Sandbox Code Playgroud)

我只有一个URL.哪种选择最适合我?

这是class我在做这个的地方:

public class …
Run Code Online (Sandbox Code Playgroud)

url android uri android-searchmanager search-suggestion

8
推荐指数
1
解决办法
560
查看次数

android传递包与搜索

您好我正在使用android 3.0 搜索小部件(不是搜索模式),问题是我需要传递一些参数和搜索词.

Android没有调用任何这些

    searchManager.setOnDismissListener( new OnDismissListener() {

            @Override
            public void onDismiss() {
                // TODO Auto-generated method stub
                Log.v(MyApp.TAG, "on dismiss search");

            }
        });

        searchManager.setOnCancelListener( new OnCancelListener() {

            @Override
            public void onCancel() {
                // TODO Auto-generated method stub
                Log.v(MyApp.TAG, "on dismiss cancel");

            }
        });

@Override
    public boolean onSearchRequested() {
        Bundle appData = new Bundle();
        appData.putLong("listino_id", this.listino_id);
        this.startSearch(null, true, appData, false);
        return true;
        // return super.onSearchRequested();
    }
Run Code Online (Sandbox Code Playgroud)

我需要我的活动不是 singleOnTop,这是我的AndroidManifest.xml

 <activity android:name=".activity.ListinoProdottiActivity" android:windowSoftInputMode="stateHidden">


             <!-- Receives the search request. -->
            <intent-filter> …
Run Code Online (Sandbox Code Playgroud)

android android-intent android-searchmanager

7
推荐指数
2
解决办法
3656
查看次数

SearchView在一个活动中产生另一个活动

我的用例如下:在活动A中,我有一个带有可折叠SearchView的操作栏.当用户提出查询并按下"搜索"按钮时,我想显示活动B的结果.我没有这样做,这是我的代码:

searchable.xml:

<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
            android:hint="@string/action_search_hint"
            android:label="@string/app_name"/>
Run Code Online (Sandbox Code Playgroud)

活动A:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu, menu);

    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));

    return true;
}
Run Code Online (Sandbox Code Playgroud)

活动A和B的AndroidManifest:

    <activity
        android:name=".ActivityA">

        <intent-filter>

            <action android:name="android.intent.action.MAIN"/>

            <category android:name="android.intent.category.LAUNCHER"/>

        </intent-filter>

    </activity>

    <activity android:name=".ActivityB">

        <intent-filter>

            <action android:name="android.intent.action.SEARCH"/>

        </intent-filter>

        <meta-data
            android:name="android.app.searchable"
            android:resource="@xml/searchable"/>

    </activity>
Run Code Online (Sandbox Code Playgroud)

Howerver,无论我尝试什么,A中的getSearchableInfo始终返回null.

我感觉我不理解某些东西.我可以使getSearchableInfo()返回非null的唯一方法是将SEARCH意图过滤器和可搜索的元数据放入清单中的活动A. 但是,当我按下"搜索"按钮时,活动A的另一个实例再次在当前的实例之上启动,这绝对不是我想要的.我想我可以将singleTop添加到A并在onNewIntent中处理SEARCH动作并启动B,但我通常不希望A成为singleTop,我想要默认值.或者我呢?

我尝试在清单中将其添加到A中(如其他一些线程所示):

    <meta-data
        android:name="android.app.default_searchable"
        android:value=".ActivityB" >
    </meta-data>
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

编辑:我用A替换了A中的'getComponentName()'行:

searchView.setSearchableInfo(searchManager.getSearchableInfo(new ComponentName(this, ActivityB.class)));
Run Code Online (Sandbox Code Playgroud)

它似乎按我想要的方式工作!我在这里做错了什么,或者这是正确的方法吗?我有点不确定,因为它在任何地方都没有提到!

android android-searchmanager android-search

7
推荐指数
1
解决办法
4365
查看次数

打开全局搜索作为叠加层

我正在编写一个启动器,并希望能够在Google App中将搜索作为叠加而不是全屏打开.

到目前为止,我只找到了一种在Google App全屏幕中打开搜索的方法,如下所示(取自AOSP Launcher3源代码):

 public static boolean openSearch(Context context) {

        SearchManager searchManager = (SearchManager) context.getSystemService(Context.SEARCH_SERVICE);
        ComponentName globalSearchActivity = searchManager.getGlobalSearchActivity();
        if (globalSearchActivity == null) {
            Timber.w("No global search activity found.");
            return false;
        }
        Intent intent = new Intent(android.app.SearchManager.INTENT_ACTION_GLOBAL_SEARCH);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.setComponent(globalSearchActivity);
        Bundle appSearchData = new Bundle();
        appSearchData.putString("source", "launcher-search");

        intent.putExtra(android.app.SearchManager.APP_DATA, appSearchData);

        intent.putExtra(android.app.SearchManager.QUERY, "");
        intent.putExtra(android.app.SearchManager.EXTRA_SELECT_QUERY, true);
        try {
            context.startActivity(intent);
            return true;
        } catch (ActivityNotFoundException ex) {
            Timber.w("Global search activity not found: %s", globalSearchActivity);
            return false;
        }

    }
Run Code Online (Sandbox Code Playgroud)

我知道这是可能的,因为像Nova和Action Launcher这样的其他发射器设法做到了......

android android-searchmanager android-launcher

7
推荐指数
1
解决办法
710
查看次数