使用 ArrayAdapter 进行自定义过滤是 Android 开发中常见的需求之一。ArrayAdapter 是 Android 提供的一个适配器类,用于将数据源与界面进行绑定。在某些情况下,我们可能需要对数据源进行自定义过滤,以便根据用户的输入来动态显示匹配的结果。本文将介绍如何在 Android 中使用 ArrayAdapter 进行自定义过滤,并提供一个案例代码来演示。
案例代码:自定义过滤的 ArrayAdapter首先,我们需要创建一个自定义的 ArrayAdapter 类,继承自 ArrayAdapter。在该类中,我们需要重写两个方法:getFilter() 和 convertResultToString()。javapublic class CustomArrayAdapter extends ArrayAdapter在上述代码中,我们通过继承 ArrayAdapter,并实现 Filterable 接口来创建一个自定义的 ArrayAdapter。在 getFilter() 方法中,我们定义了数据源的过滤逻辑。根据用户的输入 constraint,我们遍历数据源 mData,并将匹配的结果添加到过滤后的数据源 filteredList 中。然后,在 publishResults() 方法中,我们更新过滤后的数据源 mFilteredData,并通知适配器数据已改变,以便界面能够重新显示匹配的结果。使用自定义过滤的 ArrayAdapter接下来,我们将演示如何使用自定义过滤的 ArrayAdapter。假设我们有一个包含城市名的数据源,我们希望能够根据用户的输入来过滤显示匹配的城市名。首先,我们在布局文件中添加一个 AutoCompleteTextView,用于接收用户的输入。implements Filterable { private ArrayList mData; private ArrayList mFilteredData; public CustomArrayAdapter(Context context, int resource, ArrayList data) { super(context, resource, data); mData = data; mFilteredData = new ArrayList<>(data); } @Override public Filter getFilter() { return new Filter() { @Override protected FilterResults performFiltering(CharSequence constraint) { FilterResults results = new FilterResults(); ArrayList filteredList = new ArrayList<>(); if (constraint == null || constraint.length() == 0) { filteredList.addAll(mData); } else { String filterPattern = constraint.toString().toLowerCase().trim(); for (String item : mData) { if (item.toLowerCase().contains(filterPattern)) { filteredList.add(item); } } } results.values = filteredList; results.count = filteredList.size(); return results; } @Override protected void publishResults(CharSequence constraint, FilterResults results) { mFilteredData.clear(); mFilteredData.addAll((ArrayList ) results.values); notifyDataSetChanged(); } }; } @Override public String convertResultToString(Object resultValue) { return (String) resultValue; } @Override public int getCount() { return mFilteredData.size(); } @Override public String getItem(int position) { return mFilteredData.get(position); }}
xml然后,在 MainActivity 中,我们初始化数据源和 ArrayAdapter,并将 ArrayAdapter 设置给 AutoCompleteTextView。android:id="@+id/autoCompleteTextView" android:layout_width="match_parent" android:layout_height="wrap_content"/>
javapublic class MainActivity extends AppCompatActivity { private AutoCompleteTextView mAutoCompleteTextView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ArrayList在上述代码中,我们创建了一个包含城市名的 ArrayList,并将其作为数据源传递给了 CustomArrayAdapter。然后,我们将 CustomArrayAdapter 设置给 AutoCompleteTextView,这样用户输入的内容就会被自动过滤并显示匹配的结果。通过自定义过滤的 ArrayAdapter,我们可以轻松实现根据用户输入来动态过滤和显示匹配的结果。本文介绍了如何创建一个自定义过滤的 ArrayAdapter,以及如何在 Android 中使用它。通过这个案例代码,希望能够帮助读者更好地理解和应用 ArrayAdapter 的自定义过滤功能。cities = new ArrayList<>(); cities.add("北京"); cities.add("上海"); cities.add("广州"); cities.add("深圳"); cities.add("杭州"); CustomArrayAdapter adapter = new CustomArrayAdapter(this, android.R.layout.simple_dropdown_item_1line, cities); mAutoCompleteTextView = findViewById(R.id.autoCompleteTextView); mAutoCompleteTextView.setAdapter(adapter); }}