代码之家  ›  专栏  ›  技术社区  ›  Janusz Daniel Rindt

网格视图不可单击

  •  2
  • Janusz Daniel Rindt  · 技术社区  · 14 年前

    我有以下布局:

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout
       xmlns:android="http://schemas.android.com/apk/res/android"
       android:layout_width="fill_parent"
       android:layout_height="fill_parent">
    
       <GridView
          android:id="@+id/grid"
          android:layout_width="fill_parent"
          android:layout_height="fill_parent"
          android:layout_alignParentTop="true"
          android:numColumns="auto_fit"
          android:verticalSpacing="5dip"
          android:horizontalSpacing="2.5dip"
          android:columnWidth="100px"
          android:stretchMode="columnWidth"
          android:gravity="center"
          android:listSelector="@drawable/transparent"
          android:padding="5dip"
          android:scrollbarStyle="outsideOverlay"
          android:clickable="true" />
    
    </RelativeLayout>
    

    现在,我使用一个自定义适配器来扩展我自己的视图,并将它们设置为GridView中的项目,并在GridView中的单击上设置一个侦听器。

    GridView grid = (GridView) findViewById(R.id.grid);
    grid.setAdapter(new ProductAdapter(getApplicationContext(), products));
    grid.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    
       @Override
       public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
           ...
       }
    });
    

    问题是,如果我按下GridView中的一个单元格,监听器就不会启动。如果我使用触摸板在网格中导航,然后按下触摸板,监听器就会启动。是否有其他视图正在捕获单击?我的自定义视图由一个带有ImageView的LinearLayout和一个TextView组成。我了解到,为GridView展开布局在某些地方导致了一个问题。

    如何使网格中的项目可单击?

    编辑 在我的适配器中展开布局,或者只是实例化一个视图,然后为CellView返回这个视图,没有区别。

    2 回复  |  直到 14 年前
        1
  •  15
  •   Janusz Daniel Rindt    14 年前

    好吧,我犯了一个非常愚蠢的错误。我重用了另一个适配器,它停用了其中的视图。

    让你们都知道是否在适配器中设置了这个

    @Override
    public boolean areAllItemsEnabled() {
        return false;
    }
    
    @Override
    public boolean isEnabled(int position) {
        return false;
    }
    

    视图将不可单击。正如预期的那样;)

        2
  •  0
  •   Alex Volovoy    14 年前
      GridView grid = (GridView)findViewById(R.id.grid);
      grid.setOnItemClickListener(mOnClickGridCell);
    
     OnItemClickListener mOnClickGridCell = new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                // Do stuff
            }
     };