2014-04-29 5 views
5

Ich weiß, das ist schon gefragt worden, aber irgendwie funktionieren die Lösungen nicht für mich.setOnItemClickListener() funktioniert nicht auf gridView

Ich habe eine gridView, die durch eine relativeLayout aufgeblasen wird. Der Adapter ist perfekt, wenn ich ein clickListener zu einem der Kinder von relativeLayout hinzufügen, funktionieren sie auch gut. Aber nicht die itemClickListener auf der gridview. Hier

ist, was ich habe versucht:

Gridview:

<GridView 
      android:id="@+id/gridView" 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:layout_weight="1" 
      android:clickable="true" 
      android:clipToPadding="true" 
      android:columnWidth="170dp" 
      android:fitsSystemWindows="true" 
      android:focusable="true" 
      android:numColumns="auto_fit" 
      android:stretchMode="columnWidth" > 
</GridView> 

Relativelayout in gridview hinzugefügt:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/rlImage" 
    android:layout_width="220dp" 
    android:layout_height="180dp" 
    android:focusable="false" 
    android:focusableInTouchMode="false" 
    android:paddingBottom="7dp" 
    android:paddingRight="7dp" > 

    <ImageButton 
     android:id="@+id/image" 
     android:layout_width="220dp" 
     android:layout_height="220dp" 
     android:adjustViewBounds="true" 
     android:background="@null" 
     android:focusable="false" 
     android:focusableInTouchMode="false" 
     android:scaleType="centerCrop" 
     android:src="@drawable/noimage" /> 

    <!-- <ImageButton --> 
    <!-- android:id="@+id/imageHover" --> 
    <!-- android:layout_width="220dp" --> 
    <!-- android:layout_height="220dp" --> 
    <!-- android:adjustViewBounds="true" --> 
    <!-- android:background="@null" --> 
    <!-- android:scaleType="fitXY" --> 
    <!-- android:src="@drawable/tile_selector_style" /> --> 

    <TextView 
     android:id="@+id/ShowTitle" 
     android:layout_width="220dp" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentRight="true" 
     android:focusable="false" 
     android:focusableInTouchMode="false" 
     android:hint="Show Title" 
     android:paddingBottom="40dp" 
     android:paddingRight="20dp" 
     android:singleLine="true" /> 

    <TextView 
     android:id="@+id/ShowTime" 
     android:layout_width="220dp" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentRight="true" 
     android:focusable="false" 
     android:focusableInTouchMode="false" 
     android:hint="Show Time" 
     android:paddingBottom="20dp" 
     android:paddingRight="20dp" 
     android:singleLine="true" /> 

    <ProgressBar 
     android:id="@+id/progressBar" 
     style="?android:attr/progressBarStyleHorizontal" 
     android:layout_width="220dp" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_margin="0dp" 
     android:focusable="false" 
     android:focusableInTouchMode="false" /> 

</RelativeLayout> 

Die Einstellung von gridview Zuhörer:

gv.setOnItemClickListener(new OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> parent, View view, 
        int position, long id) { 
       // TODO Auto-generated method stub 
       Log.v("griditem", "clicked"); 
       Toast.makeText(context, "Here", Toast.LENGTH_LONG).show(); 

      } 
     }); 

Nein ich dea, was falsch hier gehen ..

+0

Ich denke, Sie sollten 'linearLayout.gv.setOnItemClickListener' verwenden – Kedarnath

+0

Versuchen Sie, diese Eigenschaften von Ihrem Rasterelement Android zu entfernen: fokussierbarem = "false" android: focusableInTouchMode = "false" –

+0

@Kedarnath meine gv ist:' public static Gridview gv; '' gv = (GridView) getActivity(). findViewById (R.id.gridView); ' – faizanjehangir

Antwort

13

try android:descendantFocusability="blocksDescendants" auf Ihren RelativeLayout

zu setzen und

+0

Das funktionierte wie ein Zauber !!! Vielen Dank! – Sam

11

Hey Leute android:focusable="false" android:focusableInTouchMode="false" von jedem Kind entfernen Dies ist, wie ich das Problem gelöst;

Bei der Verwendung anklickbarer Objekte im Raster kann leider Android nicht mit dem Klickereignis des Rasters umgehen.

SO USE Benutzeroberfläche verwenden.

Beispiel: USE IMAGEVIEW STATT Image UND BUTTON

, wenn Sie einen Text in diesem Bild verwenden Textview zeigen müssen und dass der Imageview oben auszurichten.

+0

Das funktionierte wie ein Zauber! –

+0

Das ist erstaunlich, es hat wirklich funktioniert!, Vielen Dank. – orchidrudra