【问题标题】:Android: Grid view with clickable grid items and nested views (buttons, checkboxes)Android:带有可点击网格项和嵌套视图(按钮、复选框)的网格视图
【发布时间】:2014-05-21 07:29:17
【问题描述】:

基本上,我想实现一个GridView,其中项目本身是可点击的,但在GridView 内是可点击的Buttons 和Checkboxes。

这是一个示例布局:

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

基本上,我想做的是,当用户单击CheckBox 时,现在可以从GridView 中选择多个项目。当用户点击Button时,会显示一个Popup。当用户单击其他任何地方时,将启动一个新的Activity。这样做的重点不是长按显示上下文菜单,我想要一个按钮来代替它。

关于如何处理这种情况的任何建议?在我当前的设置中,如果我在适配器的GetView() 方法中添加Button,则只有Button 是可点击的。整个 GridView 项目不可点击。当我删除Button 时,GridView 项目再次可点击。似乎只有整个GridView 项目或Button 是可点击的(响应OnClickListener()。有没有办法让它们都可点击?

【问题讨论】:

    标签: android gridview


    【解决方案1】:

    这篇文章很旧,但仅供参考/googlers,我有以下解决方案:

    您只需要在 imageAdapter 的 getView 中编写按钮、复选框的所有事件。 然后在 gridview 标签下的 layout.xml 文件中添加以下行:

    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();
            }
    

    干杯, });

    【讨论】:

      【解决方案2】:

      您可以制作一个 item xml 并将其用作您的 gridView 项目。然后使用适配器初始化 gridView 中的按钮和复选框。在您可以将您的 clickListener 不是添加到 gridView 项目后,而是添加到 item xml 中的布局,因此它的子视图不会响应单击事件。

      【讨论】:

      • 是的,我目前有这个设置。我的问题是OnClickListeners()。当我添加Button 时,不会触发整个GridView 项目的OnClickListener(),只有ButtonOnClickListener()。如果有这样的术语,我正在寻找一种方法来同时拥有整个 GridViewButtonOnClickListener()s。
      • 您可以尝试将 OnClickListener() 添加到整个 GridView 而不是包含它的布局中。因此,当用户单击 gridView 中的任何位置但您的按钮时,此事件将被触发
      • 我认为你没有明白我的意思,但我明白你的想法。我想要点击的不是整个GridView,而是特定的GridViewItem。我将尝试在ImageViewTextVied 上实现OnClickListener()s,或者将它们都封装在LinearLayout 中并在LinearLayout 上实现OnClickListener()
      • 我明白了。感谢您的回答!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-22
      • 1970-01-01
      • 2011-08-06
      相关资源
      最近更新 更多