Android: сетка с интерактивными элементами и вложенными представлениями (кнопки, флажки) - PullRequest
4 голосов
/ 12 сентября 2011

По сути, я хотел бы реализовать GridView, в котором сами элементы можно нажимать, но внутри GridView можно нажимать Button s и Checkbox es.

Вот пример макета:

Gridview
-----------------------------------------
|[ImageView]        |[ImageView]        |
|[TextView]         |[TextView]         |
|[Button][Checkbox] |[Button][Checkbox] |
-----------------------------------------
|[ImageView]        |[ImageView]        |
|[TextView]         |[TextView]         |
|[Button][Checkbox] |[Button][Checkbox] |
-----------------------------------------

По сути, я хочу, чтобы, когда пользователь нажимает CheckBox, из GridView можно было выбрать несколько элементов.Когда пользователь нажимает Button, отображается A Popup.Когда пользователь щелкает где-либо еще, запускается новый Activity.Весь смысл в том, что вместо того, чтобы долго нажимать, чтобы показать контекстное меню, я бы хотел, чтобы кнопка заняла его место.

Есть предложения о том, как мне подойти к этому сценарию?В моей текущей установке, если я добавлю Button в методе GetView() адаптера, только Button будет активным.Весь элемент GridView не кликабелен.Когда я удаляю Button, элемент GridView снова активируется.Похоже, что это всего лишь элемент GridView или Button, которые можно кликнуть (отвечает на OnClickListener(). Есть ли способ сделать их обоих кликабельными?

Ответы [ 2 ]

12 голосов
/ 10 октября 2012

Это сообщение старое, но только для справки / googlers, у меня есть следующее решение:

Вам нужно записать все события для кнопок, флажков в getView только для imageAdapter. Затем в файле layout.xml под тегом gridview добавьте следующие строки:

android:clickable="true"
android:descendantFocusability="beforeDescendants"

и добавьте эти строки к вашей кнопке и флажкам:

android:focusable="false"
android:focusableInTouchMode="false"

И если вы хотите, чтобы какая-то другая деятельность запускалась, если щелкнуть / коснуться какой-либо другой области элемента gridview, вам нужно будет использовать (стандартный код) / (ваша собственная соответствующая реализация):

GridView gridview = (GridView) findViewById(R.id.gridview);
    gridview.setAdapter(new ImageAdapter(this));

    gridview.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
            Toast.makeText(HelloGridView.this, "" + position, Toast.LENGTH_SHORT).show();
        }

Cheers, });

1 голос
/ 12 сентября 2011

Вы можете создать элемент xml и использовать его в качестве элемента gridView.Затем с помощью адаптера инициализируйте кнопки и флажки в вашем gridView.После того, как вы можете добавить свой clickListener не к элементам gridView, а к макету в item xml, так что его дочерние представления не будут реагировать на событие click.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...