From 68eed39c65daeeee0f26bd3ab63e23821e192473 Mon Sep 17 00:00:00 2001 From: niushuai233 Date: Thu, 11 Apr 2024 18:12:40 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20:ski:=20=E9=80=89=E6=8B=A9=E5=88=87?= =?UTF-8?q?=E6=8D=A2icon=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ui/setting/icon/IconFragment.java | 66 ++++++++++++++++++- .../icon/recycle/IconRecycleAdapter.java | 12 +++- app/src/main/res/layout/fragment_icon.xml | 10 ++- 3 files changed, 84 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/cc/niushuai/dididone/ui/setting/icon/IconFragment.java b/app/src/main/java/cc/niushuai/dididone/ui/setting/icon/IconFragment.java index 617a6fd..084e35e 100644 --- a/app/src/main/java/cc/niushuai/dididone/ui/setting/icon/IconFragment.java +++ b/app/src/main/java/cc/niushuai/dididone/ui/setting/icon/IconFragment.java @@ -1,9 +1,14 @@ package cc.niushuai.dididone.ui.setting.icon; import android.os.Bundle; +import android.text.Editable; +import android.text.TextWatcher; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -15,11 +20,14 @@ import androidx.recyclerview.widget.RecyclerView; import com.mikepenz.fontawesome_typeface_library.FontAwesome; +import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Set; +import cc.niushuai.dididone.R; import cc.niushuai.dididone.biz.entity.SavedIcon; import cc.niushuai.dididone.databinding.FragmentIconBinding; import cc.niushuai.dididone.ui.base.InitAndSetListener; @@ -50,9 +58,40 @@ public class IconFragment extends Fragment implements InitAndSetListener { @Override public void init() { + initSpinner(); initRecyclerView(); } + private void initSpinner() { + Set keySet = IconRecycleAdapter.ICON_MAP.keySet(); + ArrayList keys = new ArrayList<>(keySet); + Collections.sort(keys); + binding.iconsSelect.setAdapter(new ArrayAdapter(getContext(), com.necer.R.layout.support_simple_spinner_dropdown_item, keys)); + binding.iconsSelect.setSelection(0); + + binding.iconsSelect.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + /** + * @param parent The AdapterView where the selection happened + * @param view The view within the AdapterView that was clicked + * @param position The position of the view in the adapter + * @param id The row id of the item that is selected + */ + @Override + public void onItemSelected(AdapterView parent, View view, int position, long id) { + String key = keys.get(position); + iconRecycleAdapter.change(key, item -> true); + } + + /** + * @param parent The AdapterView that now contains no selected item. + */ + @Override + public void onNothingSelected(AdapterView parent) { + + } + }); + } + private void initRecyclerView() { binding.iconsRecyclerView.addItemDecoration(new DividerItemDecoration(this.getActivity(), DividerItemDecoration.VERTICAL)); DefaultItemAnimator itemAnimator = new DefaultItemAnimator(); @@ -60,10 +99,11 @@ public class IconFragment extends Fragment implements InitAndSetListener { itemAnimator.setRemoveDuration(1000); binding.iconsRecyclerView.setItemAnimator(itemAnimator); - iconRecycleAdapter = new IconRecycleAdapter(getActivity(), FontAwesome.Icon.class); - binding.iconsRecyclerView.setAdapter(iconRecycleAdapter); LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity()); binding.iconsRecyclerView.setLayoutManager(layoutManager); + + iconRecycleAdapter = new IconRecycleAdapter(getActivity(), FontAwesome.Icon.class); + binding.iconsRecyclerView.setAdapter(iconRecycleAdapter); } /** @@ -71,6 +111,28 @@ public class IconFragment extends Fragment implements InitAndSetListener { */ @Override public void setListeners() { + } + + private void setSelectListener() { + addIconSearchListener(); + } + private void addIconSearchListener() { + binding.iconsSearch.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + iconRecycleAdapter.change(null, item -> item.getIcon().contains(s.toString())); + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + iconRecycleAdapter.change(null, item -> item.getIcon().contains(s.toString())); + } + + @Override + public void afterTextChanged(Editable s) { + iconRecycleAdapter.change(null, item -> item.getIcon().contains(s.toString())); + } + }); } } diff --git a/app/src/main/java/cc/niushuai/dididone/ui/setting/icon/recycle/IconRecycleAdapter.java b/app/src/main/java/cc/niushuai/dididone/ui/setting/icon/recycle/IconRecycleAdapter.java index 890243c..76c64ba 100644 --- a/app/src/main/java/cc/niushuai/dididone/ui/setting/icon/recycle/IconRecycleAdapter.java +++ b/app/src/main/java/cc/niushuai/dididone/ui/setting/icon/recycle/IconRecycleAdapter.java @@ -16,6 +16,8 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.function.Predicate; +import java.util.stream.Collectors; import cc.niushuai.dididone.MainActivity; import cc.niushuai.dididone.R; @@ -30,7 +32,15 @@ public class IconRecycleAdapter extends RecyclerView.Adapter iconClass) { this.context = context; - this.savedIconList = ICON_MAP.get(getIconClassName(iconClass)); + change(getIconClassName(iconClass), item -> true); + } + + public void change(String name, Predicate filter) { + if (null != name) { + this.savedIconList = ICON_MAP.get(name); + } + this.savedIconList = this.savedIconList.stream().filter(filter).collect(Collectors.toList()); + this.notifyDataSetChanged(); } /** diff --git a/app/src/main/res/layout/fragment_icon.xml b/app/src/main/res/layout/fragment_icon.xml index 12d777c..0da9de8 100644 --- a/app/src/main/res/layout/fragment_icon.xml +++ b/app/src/main/res/layout/fragment_icon.xml @@ -8,13 +8,21 @@ android:padding="10dp" tools:context=".ui.setting.icon.IconFragment"> - + +