AFAIK на Android вы не можете скрыть / показать элементы в recycleView (оптимизированным способом) без изменения списка источников элементов. (я имею в виду динамическое удаление / добавление элементов в определенной позиции, начале, середине или конце списка)
Тем не менее, изменить источник данных и обновить список с таким небольшим количеством элементов довольно легко и можно сделать с помощью простого notifyDataSetChanged
Вкл. Activity/Fragment
создать список с переменной class-scoped
. Я пишу пример на Activity
, так как я не знаю, используете ли вы Activity
или Fragment
. Обь это будет то же самое с fragment
.
public class MyActivity extends AppCompatActivity {
private ArrayList<MyItem> myItems; //or List<MyItem> or whatever
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_activity);
//init everything
myItems = getVisibleItems(); //create a method that returns the visible items, based on your logics. You can also avoid creating a method and simply retrieve items; as you prefer.
myAdapter = new MyAdapter(MyActivity.this, myItems);
myRecyclerView.setLayoutManager(new LinearLayoutManager(MyActivity.this));
myRecyclerView.setAdapter(myAdapter);
}
//other stuffs
}
Затем, когда вы захотите изменить элементы списка, просто обновите свой ArrayList
( или список, или что-то еще ) и сообщите адаптеру, что что-то изменилось.
private void updateList(){
myItems = getVisibleItems();
myAdapter.notifyDataSetChanged();
}
Примечание: вам не нужно копировать список в адаптере, используйте то же самое, что и вы, например:
ArrayList<MyItems> adapterSource = null;
//constructor
public MyAdapter(Context ctx, ArrayList<MyItems> items){
//other stuff
this.adapterSource = items;
}
Обратите внимание, я написал это вручную без компилятора, возможно, он не идеален.
Дайте мне знать, помогло ли это!