2013-11-25 28 views
5

Ich habe ein GridView mit 81 Schaltfläche darauf. Ich möchte clicklistener zu dieser Gridview hinzufügen, aber es ist nicht verfügbar. Ich kann nicht verstehen, dass ich OnItemClickListener hinzufüge, aber es funktioniert nicht. Es gibt keinen Fehler mit dem Code. Nur ich habe funktioniert nicht OnItemClickListener.Hinzufügen von Gridview SetOnItemClickListener

Meine gridview Kinder, die eine Schaltfläche hat (gridview_members.xml);

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
> 

<Button 
    android:id="@+id/city" 
    android:layout_width="183dp" 
    android:layout_height="90dp" 
    android:textSize="19sp" 
    android:textStyle="bold" 
    android:text="Code\n\nCity" 
    android:gravity="center" 
    android:background="@drawable/city_btn_tablet" /> 

</RelativeLayout> 

Meine ImageAdapter-Klasse;

public class ImageAdapter extends BaseAdapter { 
private Context mContext; 

public ImageAdapter(Context c) { 
    mContext = c; 
} 

public int getCount() { 
    return 81; 
} 

public Object getItem(int position) { 
    return null; 
} 

public long getItemId(int position) { 
    return 0; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    View gridView; 

    gridView =new View(mContext); 

    gridView = inflater.inflate(R.layout.gridview_members, null); 

    Button city = (Button) gridView.findViewById(R.id.city); 

    return gridView; 
} 

} 

Gridview-Implementierung auf activity_main.xml;

<GridView 
android:id="@+id/gridview" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:horizontalSpacing="5dp" 
android:verticalSpacing="5dp" 
android:gravity="center" 
android:stretchMode="columnWidth" 
android:numColumns="6" > 
</GridView> 

Und schließlich meine MainActivity.java Datei;

public class MainActivity extends Activity{ 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    GridView gridview = (GridView) findViewById(R.id.gridview); 
    gridview.setAdapter(new ImageAdapter(this)); 

    gridview.setOnItemClickListener(new OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 
      Toast.makeText(MainActivity.this, "" + position, Toast.LENGTH_SHORT).show(); 
     } 
    }); 
} 
} 
+0

Android verwenden: fokussierbarem = "false" android: focusableInTouchMode = "false" fügen Sie dies Ihrem Button hinzu und versuchen Sie es erneut. –

+1

Sie können 'OnClickListener' in Ihrem benutzerdefinierten Adapter auf die Schaltfläche setzen. –

+0

möglich Duplikat von [Android - Gridview mit Custom BaseAdapter, erstellen onclicklistener] (http://stackoverflow.com/questions/20052631/android-gridview-with-custom-baseadapter-create-onclicklistener) – saiful103a

Antwort

2

Du forderst klicken Sie auf den Punkt (nicht auf dem Knopf im Artikel) so müssen Sie Ihr Kind XML Layout

von

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
> 

<Button 
    android:id="@+id/city" 
    android:layout_width="183dp" 
    android:layout_height="90dp" 
    android:textSize="19sp" 
    android:textStyle="bold" 
    android:text="Code\n\nCity" 
    android:gravity="center" 
    android:background="@drawable/city_btn_tablet" /> 

</RelativeLayout> 

zu

<?xml version="1.0" encoding="utf-8"?> 
<Button 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/city" 
    android:layout_width="183dp" 
    android:layout_height="90dp" 
    android:textSize="19sp" 
    android:clickable="true" 
    android:textStyle="bold" 
    android:text="Code\n\nCity" 
    android:gravity="center" 
    android:background="@drawable/city_btn_tablet" /> 
ändern

oder Sie können den ClickListener in den Adapter

einfügen
@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    View gridView; 

    gridView =new View(mContext); 

    gridView = inflater.inflate(R.layout.gridview_members, null); 

    Button city = (Button) gridView.findViewById(R.id.city); 

       city.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

    //Toast here 

     }}); 

    return gridView; 
} 
+0

Sie haben Recht. Das Hinzufügen von OnClickListener zur Adapterklasse ist sinnvoller. –

+0

Nicht die richtige Antwort auf dieser Seite, siehe [unter Antwort] (https://stackoverflow.com/a/20192172/3367974) statt –

0

Ich schlage vor, dass Sie Click-Listener in der Methode "getview" hinzufügen, anstatt die Aktivitätsklasse hinzuzufügen. versuchen diesen Code

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

View gridView; 

gridView =new View(mContext); 

gridView = inflater.inflate(R.layout.gridview_members, null); 

Button city = (Button) gridView.findViewById(R.id.city); 

city.setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View arg0) { 
     // TODO Auto-generated method stub 
      //Do your task here 
     } 
    }); 
    return gridView; 
} 
6

Gridview ist anklickbar keine Notwendigkeit Knopf im Gridview zu setzen.

Hinzufügen Hörer an das Netz den folgenden Code hinzu:

// Implement On Item click listener 
gridView1.setOnItemClickListener(new OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

     switch (position) { 
      case 0: 
       break; 
      case 1: 
       break; 

     } 
    } 
}); 

Und so weiter Sie alle Zahlen in den Fällen, hinzufügen können.

0

In Ihrem CustomAdapter in

onBindViewHolder(... 
{ 
    yourViewHolder.gridview.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
     //Do Something 
     } 
    }); 

}

0

Wenn du einen Text erhalten möchten, das Einzelteil geklickt Sie dieses

gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
       String item = ((TextView)view.findViewById(R.id.ID_OF_TEXTVIEW)).getText().toString(); 
       Toast.makeText(showMissions.this, "" + item, Toast.LENGTH_SHORT).show(); 

      } 
     }); 
Verwandte Themen