【问题标题】:Implementing Search Functionality on Text Change in Android在 Android 中实现文本更改的搜索功能
【发布时间】:2016-05-12 12:48:31
【问题描述】:

我正在尝试使用链接 http://developer.android.com/guide/topics/search/search-dialog.html 在我的 Android 应用程序中实现搜索功能。

它只能搜索按下搜索按钮时输入的文本。但是当搜索栏中的文本发生变化时,它无法执行搜索。我想实现这种功能,就像在 Android 手机的“人”或“联系人”应用程序中一样。

我尝试了很多搜索但找不到任何链接。如果有人可以将我指向这些链接,那将很有用。提前致谢。

编辑:

我只在 MainActivity 中实现了搜索功能。 MainActivity.java 的代码:

findViewById(R.id.id1).setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        onSearchRequested();
    }
});

Android 清单:

<activity
    android:name=".MainActivity"
    android:label="@string/app_name"
    android:screenOrientation="portrait"
    android:launchMode="singleTop">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
        <action android:name="android.intent.action.SEARCH" />
        <action android:name="android.intent.action.VIEW" />
    </intent-filter>
    <meta-data
        android:name="android.app.searchable"
        android:resource="@xml/activity_search" />
</activity>

【问题讨论】:

标签: android android-edittext android-search


【解决方案1】:

如果您正在使用搜索栏,请执行此操作,

lv.setTextFilterEnabled(true);

但我建议您使用EditText 而不是搜索栏,如果您同意为EditText 这样做

edittext = (EditText) findViewById(R.id.edittext);
edittext.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence s, int start, int before,
                int count) {
            Search_Activity.this.adapter.getFilter().filter(s);
        }

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

        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    });

希望对你有帮助。

【讨论】:

    【解决方案2】:

    首先你需要在你的活动中有处理程序:

        private static class SearchHandler extends Handler {
        private WeakReference<CitySelectionActivity> mTarget;
    
        SearchHandler(CitySelectionActivity target) {
          mTarget = new WeakReference<>(target);
        }
    
        public void setTarget(CitySelectionActivity target) {
          mTarget.clear();
          mTarget = new WeakReference<>(target);
        }
    
        @Override
        public void handleMessage(final Message msg) {
          if (msg.what == CitySelectionActivity.TRIGGER_SEARCH) {
            SelectionActivity activity = mTarget.get();
            activity.makeAjaxRequest(mSearchText.trim());
          }
        }
      }
    

    现在您需要将文本更改侦听器添加到您的搜索编辑文本中

    searchView.addTextChangedListener(new TextWatcher() {
          @Override
          public void beforeTextChanged(CharSequence s, int start, int count, int after) {
          }
    
          @Override
          public void onTextChanged(CharSequence s, int start, int before, int count) {
            mSearchText = searchView.getText().toString();
            if (!mSearchText.trim().isEmpty()) {
              handler.removeMessages(CitySelectionActivity.TRIGGER_SEARCH);
              handler.sendEmptyMessageDelayed(SelectionActivity.TRIGGER_SEARCH, SelectionActivity.SEARCH_TRIGGER_DELAY_IN_MS);
            } else {
              suggestList.clear();
            }
          }
    
          @Override
          public void afterTextChanged(Editable s) {
          }
        });
    
    猜你喜欢
    • 1970-01-01
    • 2012-02-11
    • 2014-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-18
    • 1970-01-01
    相关资源
    最近更新 更多