У меня есть задача.
Объект с именем 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>