【问题标题】:Highlight searched text in arrayAdapter ListView突出显示 arrayAdapter ListView 中的搜索文本
【发布时间】:2019-09-24 10:00:10
【问题描述】:

有没有可以突出显示我正在使用的搜索文本 arrayAdapter ListView

这是我的代码

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

    }
};

 protected void onPostExecute(final List<Site> sites) {
        progressBar.hide();
        adapter = new ArrayAdapter(context, R.layout.alert_dialog_single_choice_list_item,sites);
        list.setAdapter(adapter);
        list.setItemChecked(selectedSite, true);
        list.setSelection(selectedSite);
        filterText.setVisibility(View.VISIBLE);
        list.setOnItemClickListener(new AdapterView.OnItemClickListener() 

    }

这是 onViewCreated 方法

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    filterText = (EditText) view.findViewById(R.id.et_search_state);
    filterText.addTextChangedListener(filterTextWatcher);
    list = (ListView) view.findViewById(R.id.lv_state);
    progressBar = view.findViewById(R.id.progressBar);
    final ImageButton btnClear = view.findViewById(R.id.btn_clear);
    btnClear.setOnClickListener(this);
    new BindDataAsync().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
    filterText.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

        }

        @Override
        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
            if (charSequence.length() > 0) {
                btnClear.setVisibility(View.VISIBLE);
            } else {
                btnClear.setVisibility(View.INVISIBLE);
            }
        }

        @Override
        public void afterTextChanged(Editable editable) {

        }
    });

}

我检查了this,但这里他们使用的是自定义adapter

【问题讨论】:

    标签: android listview android-arrayadapter


    【解决方案1】:

    试试下面:

    1. 添加一个全局字段,String mSearchText = "";

    2. 在调用过滤器(adapter.getFilter().filter(s);)之前,添加mSearchText = s.toString();

    3. 改变

    adapter = new ArrayAdapter(context, R.layout.alert_dialog_single_choice_list_item,sites);

        adapter = new ArrayAdapter(context, R.layout.alert_dialog_single_choice_list_item,sites){
            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                TextView text;
                text = (TextView)super.getView(position, convertView, parent);
                String fullText = getItem(position);
                // highlight search text
                if (mSearchText != null && !mSearchText.isEmpty()) {
                    int startPos = fullText.toLowerCase(Locale.US).indexOf(mSearchText.toLowerCase(Locale.US));
                    int endPos = startPos + mSearchText.length();
                    if (startPos != -1) {
                        Spannable spannable = new SpannableString(fullText);
                        ColorStateList blueColor = new ColorStateList(new int[][]{new int[]{}}, new int[]{Color.BLUE});
                        TextAppearanceSpan highlightSpan = new TextAppearanceSpan(null, Typeface.BOLD, -1, blueColor, null);
                        spannable.setSpan(highlightSpan, startPos, endPos, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                        text.setText(spannable);
                    } else {
                        text.setText(fullText);
                    }
                } else {
                    text.setText(fullText);
                }
                return text;
            }
        };
    

    希望有帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-24
      • 2012-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-25
      • 2017-12-11
      相关资源
      最近更新 更多