- Как я могу удалить кнопку или сделать ее невидимой в Android?
- Как скрыть элемент в listview в Android
- 10 ответов
- Как скрыть элементы RecyclerView
- 3 ответа
- Как скрыть один элемент в Android Spinner
- ОТВЕТЫ
- Ответ 1
- Ответ 2
- Ответ 3
- Ответ 4
- Ответ 5
- Ответ 6
- Ответ 7
- Ответ 8
- Ответ 9
- Android — сделать TextView невидимым
- 6 ответов
- РЕДАКТИРОВАТЬ
Как я могу удалить кнопку или сделать ее невидимой в Android?
Как удалить кнопку на Android или сделать ее невидимой?
Установите видимость кнопки на GONE (кнопка будет полностью «удалена» – пространство кнопок будет доступно для других виджетов) или INVISIBLE (кнопка станет «прозрачной» – ее пространство не будет доступно для других виджетов):
Сначала сделайте кнопку невидимой в xml-файле. Затем установите кнопку, видимую в java-коде, если это необходимо.
Чтобы удалить кнопку в java-коде :
Для прозрачной кнопки в java-коде :
Чтобы удалить кнопку в файле Xml :
К прозрачной кнопке в файле Xml :
Это представление невидимо, и оно не требует места для компоновки.
Но если вы просто хотите сделать его невидимым:
Использовать setVisibility в кнопке или изображенииViwe или …..
Чтобы удалить кнопку в java-коде:
К прозрачной кнопке в java-коде
Вы должны сделать вам xml-код кнопки, как показано ниже:
скрытых:
Видимость: нет
показать:
Видимость: невидимая
Видимость: видимая
Делает это видимым, если невидимым и невидимым, если видимо
Чтобы полностью удалить кнопку из родительского макета:
Элементы управления просмотром (TextView, EditText, Button, Image и т. Д.) Имеют свойство видимости. Это может быть установлено в одно из трех значений:
Видимый – отображается
Невидимый – скрытый, но зарезервированный
Gone – Скрыто полностью
Чтобы установить видимость в коде, используйте общедоступную константу, доступную в статическом классе View:
Источник
Как скрыть элемент в listview в Android
Я знаю, этот вопрос задавался раньше, но я не видел рабочего ответа на него.
есть ли способ скрыть некоторые элементы в ListView без изменения исходных данных?
Я попытался установить видимость представления элемента в gone, он больше не будет отображаться, но место, зарезервированное для этого элемента, все еще существует.
10 ответов
вы можете либо написать свой собственный ListAdapter или подкласс одного из существующих.
в своем ListAdapter , вы просто отфильтруете элементы, которые вы не хотите отображать, возвращая измененные значения для getCount() , getItem() и getItemId() по мере необходимости.
Я пробовал несколько решений, в том числе setVisibitlity(View.GONE) и раздувание по умолчанию null view но все они имеют общую проблему, и это разделители между скрытыми элементами сложены и делают плохое видимое серое пространство в больших списках.
если ListView стоит CursorAdapter тогда лучшее решение-обернуть его CursorWrapper .
Итак, мое решение (на основе ответа @ RomanUsachev здесь) является это:
FilterCursorWrapper
когда Cursor готово, кормить FilterCursorWrapper с желаемым индексом столбца
и если вы делаете фильтрацию и сортировку, не забудьте использовать FilterCursorWrapper везде:
и для обновления списка достаточно запросить с пустым фильтром:
и вы сделали, просто изменив логику isHidden метод, вы контролируете, чтобы показать или скрыть скрытые элементы. И преимущество в том, что вы не видите нежелательных разделителей. 🙂
Если вы хотите скрыть пункт такой:
не может быть AbsListView.LayoutParams (-1,0);
Если convertview повторно используется, Вы должны добавить это ниже, чтобы установить его высоту назад:
в некоторых случаях у вас есть простое решение :
Я должен скрыть представление в виде списка, потому что элементы для заполнения являются недействительными, поэтому я не хочу видеть вид :
в моем адаптере список :
у меня есть CursorAdapter Это не может быть изменено с помощью резервного массива, потому что проверка того, должен ли элемент отображаться или нет, была после получения результата из базы данных. Я реализовал решение в bindView(View v, Context context, Cursor c) в аналогичном методе, как было описано в других сообщениях. Я думаю что лучший способ переопределения bindView() метод, а потом getView(int position, View convertView, ViewGroup parent) потому что вы должны нести около null-ckecking для convertView в getView().
второе: Я пытался скрыть View v in bindView(View v, Context context, Cursor c) и это не сработало. После расследования я понял, что мне нужно спрятаться каждый элемент в вид (включая макеты, содержащие текст, изображения и т. д.)
рубить будет установить высоту элемента списка нужно скрыто 0.
но, как говорит серетур, правильный подход-удалить элемент и использовать notifyDataSetChanged() . Почему это решение не подходит в вашем случае?
Если вы создаете свой собственный adapter вы можете сделать это public View getView(int position, View convertView, ViewGroup parent) метод. Это может быть полезно в случае, если вы планируете, чтобы показать невидимые элементы в какой-то момент. Например:
надеюсь, это поможет
простой способ решить эту проблему для меня, просто проанализируйте и проверьте свой список в действии перед вызовом метода «setAdapter», например:
Источник
Как скрыть элементы RecyclerView
Я хочу скрыть некоторые элементы RecyclerView, как показано на рисунке. При нажатии кнопки «Просмотреть все» макет должен раскрыться, а остальные элементы должны быть видны.
Всего в RecyclerView 12 элементов. Один ряд должен быть скрыт.
Я пытался сделать элементы невидимыми в начале и установить их видимыми при нажатии view all путем вызова метода.
В адаптере я пробовал это
Но я не могу создать экземпляр ViewHolder в методе view all . А также создаются пустые места, где элементы невидимы. Любые другие методы, которые вы считаете лучше?
3 ответа
Добавьте переменную int maxCount = 8 и измените код на этот:
И измените maxCount на Просмотреть все .
AFAIK на Android, вы не можете скрыть / показать элементы в recycleView (оптимизированным способом) без изменения списка источников элементов. (я имею в виду динамическое удаление / добавление элементов в определенной позиции, начале, середине или конце списка)
Тем не менее, изменение источника данных и обновление списка с таким небольшим количеством элементов довольно легко и может быть сделано с помощью простого notifyDataSetChanged
В Activity/Fragment создайте экземпляр вашего списка с помощью переменной class-scoped . Я пишу пример в Activity , так как я не знаю, используете ли вы Activity или Fragment . Обь это будет то же самое с fragment .
Затем, когда вы захотите изменить элементы списка, просто обновите свой ArrayList ( или список или любой другой ) и сообщите адаптеру, что что-то изменилось.
Примечание: вам не нужно копировать список в адаптере, используйте то же самое, что и вы, т.е.
Обратите внимание, я написал это вручную без компилятора, это может быть не идеально.
Сообщите мне, помогло ли это!
Определить локальную переменную
Отображать, как в вашем коде
В viewAll наборе методов count = 12 и обновите адаптер через слушатель для активности
Источник
Как скрыть один элемент в Android Spinner
Я ищу способ скрыть один элемент в виджере Android spinner. Это позволит вам моделировать счетчик без выбранных элементов и гарантирует, что обратный вызов onItemSelected() всегда вызывается для каждого выбранного элемента (если скрытый элемент является «текущим» ). Обычно в счетчике всегда есть один элемент, который не генерирует обратный вызов, а именно текущий.
В stackoverflow имеется некоторый код для отключения элементов (серого), но не для того, чтобы скрыть объекты полностью, как если бы они не существовали.
После долгих экспериментов я придумал несколько хакерских решений, которые работают на разных старых и новых платформах Android. У этого есть некоторые незначительные косметические недостатки, которые трудно заметить. Я все равно хотел бы услышать о более официальном решении, кроме «не делай этого с помощью счетчика».
Это всегда скрывает первый элемент в счетчике, но его можно довольно легко расширить, чтобы скрыть произвольный элемент или более одного элемента. Добавьте фиктивный элемент, содержащий пустую строку в начале списка элементов-счетчиков. Вы можете захотеть установить текущий выбор счетчика на элемент 0 перед открытием диалога счетчика, который будет имитировать невыбранный счетчик.
Пример установки Spinner с переопределением метода ArrayAdapter:
ОТВЕТЫ
Ответ 1
Чтобы скрыть произвольный элемент или более одного элемента, я думаю, что вы можете реализовать свой собственный адаптер и установить индекс (или список индексов массива), который вы хотите скрыть.
И используйте свой собственный адаптер при создании списка элементов.
(Я не проверял код) надеюсь, что это помогает.
Ответ 2
Легче скрыть элемент в конце списка, обрезая список.
Но сначала вы должны выбрать его, чтобы он отображался на счетчике, а затем проверить, был ли выбор изменен на один из отображаемых элементов.
Ответ 3
Чтобы скрыть какой-либо элемент в раскрывающемся списке счетчиков, вам необходимо передать позицию элемента, которая должна быть скрыта на основании требуемых критериев. Я достиг этого в прецеденте, скрывающем элемент, который выбран из раскрывающегося списка
И настройка адаптера примерно такая
При выборе некоторых элементов в раскрывающемся меню также необходимо изменить положение
Ответ 4
Просто для интереса, я сделал решение использовать «Подскажите» в качестве подсказки. Этот код создан для Xamarin.Android , но он может быть отлично портирован на Java за 10 минут. Используйте его как простой ArrayAdapter , не добавляя в исходный массив индексированные или индексированные по индексу числа. Он также устанавливает SpinnerGeolocation.SelectedItemId в -1, когда ничего не выбрано ( hint — текущий элемент).
Ответ 5
Я нашел это решение, которое решило мою проблему.
Ответ 6
Я думаю, что лучше разместить проверку в списке массивов, а не на Spinner, потому что, как только элемент будет отфильтрован, его можно будет добавить в Spinner
Ответ 7
Еще один подход, который лучше всего подходит для меня, — это вернуть новый пустой объект. Это значительно чистый подход, поскольку вы не играете с элементами массива.
Создайте класс адаптера, расширяющий ArrayAdapter
внутри вашего метода
Ответ 8
Это очень старый вопрос, но я нашел хороший (и, вероятно,) чистый способ не показывать первые элементы. Вдохновленный ответом @Romich, я добавил похожую логику, чтобы пропустить первый пункт (ы).
Это эффективно скрывает произвольное количество элементов (1 по умолчанию). Код сообщает только о том, что размер отображаемых объектов короче, чем он есть на самом деле, а также изменяет индекс отображаемых элементов, поэтому мы пропускаем произвольное количество элементов.
Для простоты я исключил решение, которое в настоящее время использую, которое поддерживает скрытие списка случайных элементов, но этим легко можно управлять с помощью нескольких настроек кода.
Ответ 9
почему вы хотите скрыть элемент. Просто покажите только те, которые требуются, и он предлагает быстрый вариант, чтобы вы могли указать пользователя о описании spinner.
И я согласен с Akhilesh, что лучше фильтровать этот элемент на этапе ArrayList.
Источник
Android — сделать TextView невидимым
Когда мое приложение запускается, пользователь должен коснуться экрана, прежде чем начнется настоящее действие. У меня есть textView , который дает подсказку коснуться экрана.
После касания экрана я хочу, чтобы текст стал невидимым . Прямо сейчас textView никогда не исчезает и всегда остается впереди.
6 ответов
1. Всегда используйте if(something) , если хотите узнать, является ли он true/false , вместо того, чтобы писать if(something == true) [что-то является логическим значением, которому присвоено значение true.]
2. Если вы укажете свои представления XML на метод, используя android:onClick , как показано ниже,
, Какой смысл реализовывать OnGestureListener ?
Если я делаю это onCreate , я инициализирую свое мнение
3. Если я действительно хочу прикосновение, я сделаю это
- Теперь вы можете видеть в третьем параметре есть MotionEvent , вы можете идентифицировать движение ACTION_DOWN , ACTION_MOVE и ACTION_UP
Теперь подумайте, использовали ли вы их когда-либо. У вас в голове возникла идея касания, поэтому вы пытались использовать события касания. Но вы ими не пользуетесь. Так что он делает то же, что и onClickListner в вашем случае. Если хотите движения, используйте третий, который я дал.
Но просто вы можете использовать
Те, кто просматривает onClickListner или setOnTouchListener , вы можете напрямую использовать их внутри onCreate или хранить их внутри метода, и вы можете вызывать этот метод из onCreate . Зачем хранить логическое значение? Ничего особенного
Обратите внимание, что я рассматривал myView как макет фона, а не textView, фон — тот, который вы нажимаете / касаетесь
Вы проверяете, коснулся ли экран в onCreate() , который вызывается только один раз в начале действия. Инициализируйте TextView глобально и установите его видимость внутри onTouch(View v, MotionEvent event) Также ваш onTouch() не верен. Вы должны переопределить public boolean onTouch(View v, MotionEvent event)
Вместо реализации OnGestureListener добавьте setOnTouchListener в ваше корневое представление вашего макета активности
Например, rlTestView — это идентификатор корневого макета вашей деятельности, затем используйте приведенный ниже код в своем методе oncreate .
Итак, теперь вы несколько раз меняли код вопросов, и я надеюсь, что это последнее изменение. Только чем мог помочь мой ответ.
Вы сделали это в своем onCreate() :
Но это выполняется напрямую и не имеет ничего общего с вашим методом onTouch() . Давайте предположим, что ваш onTouch() работает правильно. Сделайте TextView глобальным :
Инициализировать его в onCreate() :
А затем спрятать его в onTouch() :
Но вы должны быть уверены, что ваш метод onTouch() работает. Вы можете сделать Toast или Журнал для проверки. Вы должны быть уверены, что:
— TextView находится внутри вашего макета XML, который вы установили с помощью setContentView(R.layout.activity_game);
— Метод onTouch() объявлен в атрибуте xml вашего TextView
И установите для clickable вашего TextView значение true:
РЕДАКТИРОВАТЬ
Если вы реализуете onGestureListener() , я полагаю, что событие касания используется слушателем, и ваш TextView не распознал onTouch() . Если вы не обнаруживаете жесты в своей деятельности, удалите эту реализацию.
Используйте приведенный ниже код для метода onCreate и установите yes visibility вместо GONE вместо невидимого. Также укажите текущее значение visibilty для TextView в onTouch и установите для него значение
Источник