【问题标题】:Filter for android ListView - Space Character过滤android ListView - 空格字符
【发布时间】:2012-03-13 12:38:11
【问题描述】:

我想使用EditText 框和适配器getFilter() 函数过滤我的listView。它工作得很好,直到我在文本框中输入一个空格字符。

编辑:这是一个 SimpleAdapter 而不是 ArrayAdapter

如果我的列表包含这些词:{“Apple”、“Banana”、“Red Apple”} 如果我输入“apple”,它将返回其中包含单词 apple 的所有项目(Apple 和 Red Apple)。 如果我输入“apple”,它不会返回任何东西。

有什么想法吗?代码如下:

searchBox = (EditText) findViewById(R.id.searchBox);

searchBox.addTextChangedListener(filterTextWatcher);

private TextWatcher filterTextWatcher = new TextWatcher() {

public void onTextChanged(CharSequence s, int start, int before, int count) {
    // TODO Auto-generated method stub          
}

public void beforeTextChanged(CharSequence s, int start, int count,
            int after) {
    // TODO Auto-generated method stub          
}

public void afterTextChanged(Editable s) {
    // TODO Auto-generated method stub
    myAdapter.getFilter().filter(s.toString());
}
};

【问题讨论】:

  • 你有想过这个吗?
  • 我没有抱歉。我认为解决方案可能是基于 ArrayAdapter 制作自己的适配器,但我还没有尝试过(停止从事该项目)。
  • @CaptainProg 您在寻找什么类型的答案?使用trim() 提出的原始问题是最佳答案。
  • @Chris911 我也有类似的问题,我发了一个问题stackoverflow.com/questions/39573432/…希望你能帮忙。

标签: java android listview filter adapter


【解决方案1】:

如果 SimpleAdapter 的过滤功能不能满足您的过滤要求,您将需要覆盖 SimpleAdapter 并实现您自己的过滤要求。

这需要大量代码,因为SimpleAdapter 中的过滤器使用了大量私有对象,您需要对其进行复制。同样适用于ArrayAdapter

幸运的是,其他人 (@uʍopǝpısdn) 已经参与了该流程,编写了代码并将其提供给社区。​​p>

您可以找到指向博客here 的链接,包括如何使用示例,以及here 中的代码。

问候。

【讨论】:

  • 我认为这是唯一有效的解决方案。自从我问这个问题以来已经有一段时间了,我不再从事那个项目了,但我会尝试验证。谢谢。
  • 没错。所描述的问题是由于这一行引起的:String[] words = str.split(" "); in SimpleAdapter.SimpleFilter 类,它只是省略了初始字符串中的空格,将它们拆分为单词。
  • @Luis 我也有类似的问题,我已经发了一个问题stackoverflow.com/questions/39573432/…希望你能帮忙。
【解决方案2】:

试试这个:

myAdapter.getFilter().filter(s.toString().trim());

【讨论】:

  • 这仅部分有效,因为它删除了空格,但假设我输入“Red Ap”,它会将其修剪为“RedAp”,并且我的选择中没有包含“RedAp”的单词。所以基本上如果我在一个单词之前或之后放一个“”但没有给出我想要的结果,它确实可以解决问题。
  • @Chris911:实际上不会。修剪的意思是,它只是分别在文本开始和停止之前和之后删除空格。所以如果你输入“apple”,那么它会将其修剪为“ apple”,但如果你输入“red ap”,它就会把它当作它。明白了吗?
  • 感谢 Hiral 的解释,但这仍然不能解决问题。我开始认为唯一的方法是使用我自己的过滤器实现我自己的适配器。
猜你喜欢
  • 2012-02-02
  • 1970-01-01
  • 2011-10-17
  • 2012-12-11
  • 2013-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多