Это нормальная фильтрация для Spinner в Android? - PullRequest
0 голосов
/ 25 января 2020

У меня есть задача.

Объект с именем Element, и у меня есть arrayList<Element> именованные элементы, и я показываю его в счетчике с использованием адаптера массива.

Все элементы имеют имя и тип int 1, 2 и 3.

Так что в элементах arrayList могут быть некоторые с типом 1, некоторые с типом 2 и 3.

И задача состоит в том, чтобы, когда я выбираю элемент с типом 1, все другие элементы должны быть удалены из этого arrayList.

Когда я выбираю другой, например, с типом 2, все элементы этого типа также должны быть удалены, но другие элементы с типом 1 и 3 должны появиться снова.

Я делаю следующее методы, и это работает хорошо, пожалуйста, посмотрите на код и скажите, это нормальный код или могут быть лучшие варианты? Спасибо.

public class TrainListActivity extends AppCompatActivity {

    private ArrayList<Element> elements;
    private Spinner spinner;
    private ArrayAdapter<Element> arrayAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_train_list);
        spinner = findViewById(R.id.sp_first_main_element);
        elements = new ArrayList<>();

        elements.add(new Element("Choose your element", 0));
        elements.add(new Element("Planche 1", 1));
        elements.add(new Element("Front lever 2", 2));
        elements.add(new Element("Back lever 1", 1));
        elements.add(new Element("Handstand 3", 3));
        elements.add(new Element("Iron cross 3", 3));

        arrayAdapter = new ArrayAdapter<>(getApplicationContext(), android.R.layout.simple_spinner_dropdown_item, elements);
        arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

        spinner.setAdapter(arrayAdapter);

        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                Element el = (Element) parent.getItemAtPosition(position);
                checkReverso(el);
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }
        });
    }

    private void checkReverso(Element element) {
        int currentType = element.getType();
        ArrayList<Element> newElements = new ArrayList<>();
        newElements.add(element);
        for (Element el:elements) {
            if (el.getType() != currentType) {
                newElements.add(el);
            }
        }
        arrayAdapter = new ArrayAdapter<>(getApplicationContext(), android.R.layout.simple_spinner_dropdown_item, newElements);
        spinner.setAdapter(arrayAdapter);

    }
}

Вот мой класс Элемент

public class Element {
    private String name;
    private int type;

    public String getName() {
        return name;
    }

    public int getType() {
        return type;
    }

    public void setType(int type) {
        this.type = type;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Element(String name, int type) {
        this.type = type;
        this.name = name;
    }

    @Override
    public String toString() {
        return name;
    }
}

И xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Spinner
        android:id="@+id/sp_first_main_element"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        style="@style/spinner_style"/>

</androidx.constraintlayout.widget.ConstraintLayout>
...