中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

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
竹山县| 潞西市| 合水县| 雅安市| 东丰县| 东平县| 宜春市| 长丰县| 平和县| 宝坻区| 石嘴山市| 南部县| 瑞安市| 河津市| 息烽县| 济源市| 南皮县| 阿坝县| 扎兰屯市| 大埔县| 方山县| 迭部县| 九台市| 漠河县| 丹江口市| 昌都县| 北京市| 芦溪县| 赣州市| 武义县| 都昌县| 逊克县| 上虞市| 新乐市| 旬邑县| 清镇市| 泰顺县| 桃园县| 丹江口市| 大安市| 蓬莱市|