【问题标题】:Filter string array with edittext使用edittext过滤字符串数组
【发布时间】:2018-06-17 09:01:23
【问题描述】:
String[] cities= {"Madrid","Barcelona","Valencia","Seville","Zaragoza","Malaga","Murcia","Palma"}

如何使用编辑文本过滤此字符串数组。例如,我将在编辑文本中键入“ma”。然后;字符串数组将像这样过滤(或创建新的字符串数组);

String[] cities= {"Madrid","Malaga","Palma"}

你能帮帮我吗?谢谢。

【问题讨论】:

  • 你试过什么?这是提示 - addTextChangeListener()EditText
  • 简单...只是谷歌它的人...
  • 在此处发布问题之前先做一些研究。如果您将它们显示为 list ,请使用 autocompletetextview。否则使用textWatcher
  • 花时间搜索谷歌。您的问题是正常问题。
  • 我认真地用谷歌搜索。而且我没有找到,我敢肯定这并不简单。我已经尝试过 addTextChangeListener(), autocompletetextview。

标签: android arrays string filter


【解决方案1】:

将数组转换为列表并使用它:

editText.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) {
            if(!s.toString().isEmpty()){
                List<String> city = filterCity(clubList,s.toString());
            }

        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    });

public List<String>  filterCity(List<String> cities,String searchValue){
    List<String>  newCity = new ArrayList<>();
    for(String city:cities){
        if(city.contains(searchValue)){
            newCity.add(city);
        }
    }
    return newCity;

}

【讨论】:

  • 非常感谢。
【解决方案2】:

Android 编程不能改变 json,但通过编程你可以做你想做的事情。

首先,您必须将 JSON 的所有值存储到 POJO,然后通过 RecyclerView 或 ListView 您可以获得相同的值。

     EditText myTextBox = (EditText) findViewById(R.id.myTextBox);
     myTextBox.addTextChangedListener(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) {

   }
  });

【讨论】:

    【解决方案3】:
            String[] cities= {"Madrid","Barcelona","Valencia","Seville","Zaragoza",
                              "Malaga","Murcia","Palma"}
            String[] resultCities=null;
    
            editTextSearch.addTextChangedListener(new TextWatcher() {
    
                   @Override
                   public void afterTextChanged(Editable s) {
                   resultCities = search(editTextSearch.getText().toString())
                   }
    
                   @Override    
                   public void beforeTextChanged(CharSequence s, int start,
                     int count, int after) {
                   }
    
                   @Override    
                   public void onTextChanged(CharSequence s, int start,
                     int before, int count) {
    
                   }
                  });
    
                  public String[] search(String txtsearch) {
                            String arr[]=null;
                            int pos=0;
                            for (int i = 0; i < cities.length; i++) {
    
                                if(cities[i].contains(txtsearch)){
                                    arr[pos]=cities[i];
                                    pos++;
                                }
                            }
                            return arr;
                        }
    

    【讨论】:

    • 非常感谢“equalsIgnoreCase”。
    • 对不起,我的错误
    【解决方案4】:

    为此使用 AutoCompleteTextView。 示例:

    在您的布局 xml 中放置:

     <AutoCompleteTextView
        android:id="@+id/autoCompleteTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/textView"
        android:layout_marginLeft="36dp"
        android:layout_marginTop="17dp"
        android:ems="10"
        android:text="">
    
        <requestFocus />
    </AutoCompleteTextView>
    

    在你的活动/片段中

    public class MainActivity  extends AppCompatActivity {
    String[] cities= {"Madrid","Barcelona","Valencia","Seville","Zaragoza","Malaga","Murcia","Palma"}
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        //Creating the instance of ArrayAdapter containing list of fruit names
        ArrayAdapter<String> adapter = new ArrayAdapter<String>
                (this, android.R.layout.select_dialog_item, cities);
        //Getting the instance of AutoCompleteTextView
        AutoCompleteTextView actv = (AutoCompleteTextView) findViewById(R.id.autoCompleteTextView);
        actv.setThreshold(1);//will start working from first character
        actv.setAdapter(adapter);//setting the adapter data into the AutoCompleteTextView
        actv.setTextColor(Color.RED);
    }
    

    }

    【讨论】:

      【解决方案5】:

      如果您使用列表/网格视图,则应在适配器中添加过滤方法,如果您在此处搜索可以找到大量答案,我建议在适配器中使用过滤器。

      【讨论】:

        猜你喜欢
        • 2021-06-06
        • 2019-04-04
        • 1970-01-01
        • 1970-01-01
        • 2022-01-16
        • 2017-07-15
        • 2022-07-04
        • 2021-07-23
        • 1970-01-01
        相关资源
        最近更新 更多