在Android中实现文本更改的搜索功能

时间:2016-02-03 10:54:14

标签: android android-edittext android-search

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

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

我试图搜索很多但无法找到任何链接。如果有人可以指导我这些链接,那将是有用的。提前谢谢。

编辑:

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

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

Android Manifest:

<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>

2 个答案:

答案 0 :(得分: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) {

        }
    });

我希望这会对你有所帮助。

答案 1 :(得分:0)

首先,您需要在您的活动中拥有处理程序:

    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) {
      }
    });