Вы должны учитывать из своего кода Fragment
:
1) Реализовать onCreateOptionsMenu(Menu menu, MenuInflater inflater)
2) Вызвать setHasOptionsMenu
3) И также внедрить onOptionsItemSelected(MenuItem item)
Тогда вы будете в порядке как на телефоне, так и на планшете.
Я бы попробовал ответить @ Mehrdad и, возможно, протестировал бы его на этом тоже ...
var selected = items.Where(item => item.Something > 10).ToList();
selected.ForEach(item => items.Remove(item));
otherList.AddRange(selected);
Я предлагаю:
var selected = items.Where(item => item.Something > 10).ToList();
items = items.Except(selected).ToList();
otherList.AddRange(selected);
RemoveAll проходит через каждый элемент и перечисляет все значения выбранного вами списка каждый раз. Это займет больше времени, чем следовало бы ...
Я бы поставил условие прямо в параметр RemoveAll:
items.RemoveAll(item => item.something > 10);
Если вы сделаете это и не измените остальную часть кода, произойдет дублирование кода. , что не очень хорошо. Чтобы этого избежать, я бы сделал следующее:
Func<ItemType, bool> selectedCondition = (item => item.something > 10);
otherList.AddRange(items.Where(selectedCondition));
items.RemoveAll(new Predicate<ItemType>(selectedCondition));
Как насчет раздела:
int[] items = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
var partition = items.ToLookup(x => x > 5);
var part1 = partition[true];
var part2 = partition[false];
Это довольно плохо с точки зрения производительности - он фактически перечисляет запрос n раз (для n элементов в элементах
). Было бы лучше, если бы вы построили (например) HashSet
элементов, которыми нужно манипулировать.
Чтобы дать простой пример только со значениями int
:
var items = new List<int> { 1, 2, 3, 4, 5, 6 };
var otherList = new List<int>();
var selected = new HashSet<int>(items.Where(
item => item > 3));
otherList.AddRange(selected);
items.RemoveAll(selected.Contains);