2011-09-12 24 views
4

基本的には、GridViewを実装したいと思いますが、GridViewのアイテムはクリック可能です。ButtonCheckboxです。基本的にはAndroid:クリック可能なグリッドアイテムとネストされたビュー(ボタン、チェックボックス)を持つグリッドビュー

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

、私がやりたいことはある、ユーザーがCheckBoxをクリックすると、複数のアイテムが今GridViewから選択することができます。

は、ここでのサンプルレイアウトです。ユーザーがButtonをクリックすると、A Popupが表示されます。ユーザーが他の場所をクリックすると、新しいActivityが開始されます。これの全ポイントは、コンテキストメニューを表示するために長時間押すのではなく、ボタンを置きたいと思います。

私はこのシナリオにどのようにアプローチできますか?私の現在の設定では、アダプタのGetView()メソッド内にButtonを追加すると、Buttonのみがクリック可能です。 GridView全体のアイテムはクリックできません。 Buttonを削除すると、GridViewアイテムが再びクリック可能になります。 OnClickListener()に応答(それが唯一の全体GridView項目のかButtonがクリック可能であると思われます。あなたはアイテム XMLを作成し、あなたのGridViewのアイテムとしてそれを使用することができますか?

答えて

12

この投稿は古いですが、参考/ googlerのために、私は以下の解決策を持っています:

imageAdapterのgetViewのボタン、チェックボックスのすべてのイベントを書き込む必要があります。

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

と、ボタンやチェックボックスにこれらの行を追加します: は、次にGridViewのタグの下にlayout.xmlファイルにこれらの行を追加

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

乾杯、 });

1

それらの両方がクリック可能にする方法はあります。そして、 GridViewアイテムにではなく、アイテム xmlのレイアウトにclickListenerを追加できるようになると、子ビューはclickイベントに応答しなくなります。

+0

はい、現在その設定があります。私の問題は 'OnClickListeners()'です。 'Button'を追加すると、' GridView'アイテム全体の 'OnClickListener()'は起動されず、 'Button'の' OnClickListener() 'だけが起動されます。私は 'GridView'と' Button'の 'OnClickListener()'の両方に、そのような用語があれば、起動可能にする方法を探しています。 – Neilers

+0

OnClickListener()をGridView全体ではなく、レイアウトを含むレイアウトに追加することができます。だから、ユーザーがグリッドビューのどこかをクリックしてボタンを押すと、このイベントが発生します – superM

+0

私はあなたが私の意図を理解できなかったと思いますが、私はあなたのアイデアを得ます。 'GridView'ではなく、クリック可能にしたい特定の' GridViewItem'です。 'OnClickListener()'を 'ImageView'と' TextVied'の両方に実装しようとするか、 'LinearLayout'の中に入れて、' LinearLayout'に 'OnClickListener()'を実装します。 – Neilers

関連する問題