Browse Source

feat: 🎿 选择切换icon内容

master
niushuai233 1 year ago
parent
commit
68eed39c65
  1. 66
      app/src/main/java/cc/niushuai/dididone/ui/setting/icon/IconFragment.java
  2. 12
      app/src/main/java/cc/niushuai/dididone/ui/setting/icon/recycle/IconRecycleAdapter.java
  3. 10
      app/src/main/res/layout/fragment_icon.xml

66
app/src/main/java/cc/niushuai/dididone/ui/setting/icon/IconFragment.java

@ -1,9 +1,14 @@
package cc.niushuai.dididone.ui.setting.icon; package cc.niushuai.dididone.ui.setting.icon;
import android.os.Bundle; import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Toast;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
@ -15,11 +20,14 @@ import androidx.recyclerview.widget.RecyclerView;
import com.mikepenz.fontawesome_typeface_library.FontAwesome; import com.mikepenz.fontawesome_typeface_library.FontAwesome;
import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set;
import cc.niushuai.dididone.R;
import cc.niushuai.dididone.biz.entity.SavedIcon; import cc.niushuai.dididone.biz.entity.SavedIcon;
import cc.niushuai.dididone.databinding.FragmentIconBinding; import cc.niushuai.dididone.databinding.FragmentIconBinding;
import cc.niushuai.dididone.ui.base.InitAndSetListener; import cc.niushuai.dididone.ui.base.InitAndSetListener;
@ -50,9 +58,40 @@ public class IconFragment extends Fragment implements InitAndSetListener {
@Override @Override
public void init() { public void init() {
initSpinner();
initRecyclerView(); initRecyclerView();
} }
private void initSpinner() {
Set<String> keySet = IconRecycleAdapter.ICON_MAP.keySet();
ArrayList<String> keys = new ArrayList<>(keySet);
Collections.sort(keys);
binding.iconsSelect.setAdapter(new ArrayAdapter<String>(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() { private void initRecyclerView() {
binding.iconsRecyclerView.addItemDecoration(new DividerItemDecoration(this.getActivity(), DividerItemDecoration.VERTICAL)); binding.iconsRecyclerView.addItemDecoration(new DividerItemDecoration(this.getActivity(), DividerItemDecoration.VERTICAL));
DefaultItemAnimator itemAnimator = new DefaultItemAnimator(); DefaultItemAnimator itemAnimator = new DefaultItemAnimator();
@ -60,10 +99,11 @@ public class IconFragment extends Fragment implements InitAndSetListener {
itemAnimator.setRemoveDuration(1000); itemAnimator.setRemoveDuration(1000);
binding.iconsRecyclerView.setItemAnimator(itemAnimator); binding.iconsRecyclerView.setItemAnimator(itemAnimator);
iconRecycleAdapter = new IconRecycleAdapter(getActivity(), FontAwesome.Icon.class);
binding.iconsRecyclerView.setAdapter(iconRecycleAdapter);
LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity()); LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());
binding.iconsRecyclerView.setLayoutManager(layoutManager); 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 @Override
public void setListeners() { 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()));
}
});
} }
} }

12
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.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import cc.niushuai.dididone.MainActivity; import cc.niushuai.dididone.MainActivity;
import cc.niushuai.dididone.R; import cc.niushuai.dididone.R;
@ -30,7 +32,15 @@ public class IconRecycleAdapter extends RecyclerView.Adapter<IconRecycleAdapter.
public IconRecycleAdapter(Context context, Class<? extends IIcon> iconClass) { public IconRecycleAdapter(Context context, Class<? extends IIcon> iconClass) {
this.context = context; this.context = context;
this.savedIconList = ICON_MAP.get(getIconClassName(iconClass)); change(getIconClassName(iconClass), item -> true);
}
public void change(String name, Predicate<? super SavedIcon> filter) {
if (null != name) {
this.savedIconList = ICON_MAP.get(name);
}
this.savedIconList = this.savedIconList.stream().filter(filter).collect(Collectors.toList());
this.notifyDataSetChanged();
} }
/** /**

10
app/src/main/res/layout/fragment_icon.xml

@ -8,13 +8,21 @@
android:padding="10dp" android:padding="10dp"
tools:context=".ui.setting.icon.IconFragment"> tools:context=".ui.setting.icon.IconFragment">
<androidx.appcompat.widget.AppCompatEditText
<Spinner
android:id="@+id/icons_select"
android:layout_width="match_parent"
android:layout_height="35dp"
/>
<EditText
android:id="@+id/icons_search" android:id="@+id/icons_search"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="50dp" android:layout_height="50dp"
android:layout_marginLeft="15dp" android:layout_marginLeft="15dp"
android:layout_marginTop="15dp" android:layout_marginTop="15dp"
android:layout_marginRight="15dp" android:layout_marginRight="15dp"
android:scrollHorizontally="true"
android:background="@drawable/bg_miui10" /> android:background="@drawable/bg_miui10" />
<androidx.recyclerview.widget.RecyclerView <androidx.recyclerview.widget.RecyclerView

Loading…
Cancel
Save