2016-12-01 1 views
1

のために働くどちら:setOnItemSelectedListenerもsetOnClickListener GridViewコントロールには、次られる場合に、GridView

<GridView 
    android:id="@+id/gridview" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_margin="0dp" 
    android:horizontalSpacing="0dp" 
    android:numColumns="2" 
    android:stretchMode="columnWidth" 
    android:verticalSpacing="0dp" 
    android:fadeScrollbars="false" 
    android:focusable="true" 
    android:focusableInTouchMode="true" 
    android:descendantFocusability="afterDescendants"/> 

Javaコードは以下の通りです:のみonNothingSelected

gridview = (GridView) findViewById(R.id.gridview); 
gridview.setNumColumns(iColumnCount); 
gridview.setAdapter(dta); 
gridview.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
    @Override 
    public void onItemSelected(AdapterView<?> adapterView, View view, int iPosition, long l) { 
     utility.logd("gridview", "selected item position:" + iPosition); 
    } 

    @Override 
    public void onNothingSelected(AdapterView<?> adapterView) { 
     utility.logd("gridview", "nothing selected."); 
    } 
}); 
gridview.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     utility.logd("gridview", "item clicked"); 
    } 
}); 

は()アプリが起動した後に一度と呼ばれます。リモートコントロールでGridViewのフォーカスが変更されたり、アイテムがクリックされたりすると、他のリスナーは呼び出されません。

リスナーを機能させる方法のヒントを教えてください。
GirdViewの他のすべてが期待通りに機能します。

編集:以下は、各グリッドセルのレイアウトである。

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:padding="0dp" 
    android:layout_gravity="center" 
    android:id="@+id/biyee_relativeLayoutRoot"> 

    <ImageButton 
     android:id="@+id/imageButton" 
     android:background="@drawable/button_background" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:contentDescription="snapshot" 
     android:layout_gravity="center" 
     android:scaleType="fitXY" 
     android:adjustViewBounds="true" 
     android:layout_margin="0dp" 
     android:padding="10dp" 
     android:src="@drawable/ic_launcher" 
     android:onClick="onClick_imageButton"/> 

    <LinearLayout 
     android:id="@+id/linearLayoutCaption" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="@color/black_overlay" 
     android:orientation="vertical" 
     android:layout_margin="10dp" 
     android:padding="5dp"> 

     <TextView 
      android:id="@+id/textViewName" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="top" 
      android:text="Name" 
      android:textAppearance="?android:attr/textAppearanceSmall" /> 

     <TextView 
      android:id="@+id/textViewModel" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Model" 
      android:textAppearance="?android:attr/textAppearanceSmall"/> 

     <TextView 
      android:id="@+id/textViewTime" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="bottom" 
      android:text="Time" 
      android:textAppearance="?android:attr/textAppearanceSmall" /> 
    </LinearLayout> 

    <TextView 
     android:id="@+id/textViewPosition" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="bottom" 
     android:text="n" 
     android:textAppearance="?android:attr/textAppearanceSmall" 
     android:layout_margin="15dp"/> 

</FrameLayout> 

編集(2):ダニエル・ニュージェントのthe tip当たり 、私はカスタムアイテムビューのレイアウトからのImageButtonを除去テストの目的、およびOnItemSelectedListenerが完全に動作するようになりました。したがって、犯人はImageButtonです。クリック可能なオブジェクトがあれば、OnItemSelectedListenerが壊れてしまうようです。

編集(3):

完璧に動作OnItemSelectedListener
<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="300dp" 
    android:layout_height="300dp" 
    android:orientation="vertical" 
    android:background="@color/red"> 

</LinearLayout> 

が、OnClickListenerとOnItemClickListenerは私かどうかに関係なく呼び出されることはありません:テストのために、私はカスタム・アイテム・ビューに対して次のレイアウトを使用マウスまたはリモコンを使用して項目をクリックします。

+0

あなたは 'onItemSelectedListener()'の代わりに 'onItemClickListener()'が必要でしょう。 – Opiatefuchs

+0

残念ながら、GridViewにはsetOnItemClickedListenerがありません。 AdapterView.onItemSelectedListenerはありません。 – Hong

+0

GridViewにはonItemClickListener()がありませんか? APIはだまされていますか? https://developer.android.com/guide/topics/ui/layout/gridview.html – Opiatefuchs

答えて

0

はあなたが矢のような選択のいくつかの種類またはいくつかの他のものを実装している場合代わりにonItemSelectedListener

gridview.setOnItemClickListener(new OnItemClickListener() { 
     public void onItemClick(AdapterView<?> parent, View v, 
       //Your Logic here 
     } 
); 

onItemSelectedListenerのは、仕事をするOnItemClickListenerを使用してみてください。このビュー内の項目が が選択されたときに呼び出されるdeveloper.android.com

コールバックメソッドから

。このコールバックは、新しく選択された の位置が以前に選択された位置と異なる場合、または に選択された項目がない場合にのみ呼び出されます。

インペラメンターは、選択されたアイテムに関連付けられたデータに がアクセスする必要がある場合、getItemAtPosition(position)を呼び出すことができます。

+0

手を貸していただきありがとうございます。 GridViewにはsetOnItemClickedListenerがありません。 AdapterView.onItemSelectedListenerはありません。フォーカスをある項目から別の項目に移動するときに、リスナーを呼び出すようにします。 – Hong

+0

@実際に別の商品を選択していますか? – Sid

+0

@Hong GridViewはこの例では、OnItemClickListenerチェックアウトを持っています:https://developer.android.com/guide/topics/ui/layout/gridview.html – Sid

関連する問題