91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

android 列表數據如何過濾

小樊
81
2024-11-27 05:03:44
欄目: 編程語言

在 Android 中,過濾列表數據可以通過以下幾種方法實現:

  1. 使用集合(Collections)類的方法:

    如果你有一個 List 類型的原始數據列表,可以使用 Collections 類中的 filter() 方法來過濾數據。首先,需要創建一個自定義的 Filter 對象,實現 Filterable 接口,并重寫 getFilter() 方法。然后,在 getFilter().filter() 方法中傳入一個參數,這個參數是一個適配器的原始數據列表。最后,將過濾后的結果設置給適配器。

    例如:

    public class MyAdapter extends BaseAdapter implements Filterable {
        private List<String> originalData;
        private List<String> filteredData;
        private Filter myFilter;
    
        public MyAdapter(List<String> data) {
            this.originalData = data;
            this.filteredData = new ArrayList<>(data);
        }
    
        @Override
        public Filter getFilter() {
            if (myFilter == null) {
                myFilter = new Filter() {
                    @Override
                    protected FilterResults performFiltering(CharSequence constraint) {
                        FilterResults results = new FilterResults();
                        List<String> filteredList = new ArrayList<>();
    
                        if (constraint == null || constraint.length() == 0) {
                            filteredList.addAll(originalData);
                        } else {
                            String filterPattern = constraint.toString().toLowerCase().trim();
    
                            for (String item : originalData) {
                                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) {
                        filteredData = (List<String>) results.values;
                        notifyDataSetChanged();
                    }
                };
            }
            return myFilter;
        }
    
        // 其他適配器方法,如 getItem()、getItemId() 和 getCount()
    }
    

    使用示例:

    List<String> data = new ArrayList<>();
    data.add("Apple");
    data.add("Banana");
    data.add("Orange");
    data.add("Grape");
    
    MyAdapter adapter = new MyAdapter(data);
    ListView listView = findViewById(R.id.listView);
    listView.setAdapter(adapter);
    
    EditText editText = findViewById(R.id.editText);
    editText.setOnTextChangedListener(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) {
            adapter.getFilter().filter(s);
        }
    
        @Override
        public void afterTextChanged(Editable s) {}
    });
    
  2. 使用 LiveData 和 RxJava:

    如果你使用 Kotlin,可以考慮使用 LiveData 和 RxJava 來過濾列表數據。LiveData 是一種可觀察的數據持有者類,可以在數據變化時自動通知觀察者。RxJava 是一種響應式編程庫,可以方便地處理異步數據和事件。

    例如,使用 RxJava 過濾列表數據:

    val data = listOf("Apple", "Banana", "Orange", "Grape")
    val filteredData = MutableLiveData<List<String>>()
    
    data.toObservable()
        .filter { it.contains(query, ignoreCase = true) }
        .toList()
        .subscribe({ filteredList ->
            filteredData.postValue(filteredList)
        })
    
    // 在適配器中使用 filteredData
    

    使用 LiveData 過濾列表數據:

    val data = listOf("Apple", "Banana", "Orange", "Grape")
    val filteredData = MutableLiveData<List<String>>()
    
    data.observeForever {
        filteredData.value = it.filter { it.contains(query, ignoreCase = true) }
    }
    
    // 在適配器中使用 filteredData
    

這些方法可以幫助你在 Android 中過濾列表數據。你可以根據自己的需求和項目結構選擇合適的方法。

0
松桃| 五台县| 买车| 龙南县| 马山县| 岳西县| 赣州市| 怀集县| 宜阳县| 白水县| 克什克腾旗| 晋州市| 平果县| 平谷区| 丹棱县| 上蔡县| 册亨县| 循化| 丹东市| 琼中| 宝坻区| 五大连池市| 左云县| 嘉义市| 中西区| 搜索| 彰化县| 专栏| 大竹县| 鄱阳县| 南陵县| 通渭县| 长宁县| 灵石县| 平乐县| 康平县| 定结县| 胶州市| 思茅市| 额济纳旗| 进贤县|