web-dev-qa-db-fra.com

Comment ajouter gridview setOnItemClickListener

J'ai un GridView avec 81 boutons dessus. Je veux ajouter clicklistener à ce gridview mais celui-ci n'est pas disponible. J'ai ajouté le OnItemClickListener mais cela ne fonctionne pas et je ne comprends pas pourquoi. Il n'y a pas d'erreur avec le code. La seule chose qui ne fonctionne pas est le OnItemClickListener.

Mes enfants gridview qui ont un bouton dessus (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>

Ma classe ImageAdapter;

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

}

Implémentation de Gridview sur 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>

Et enfin mon fichier MainActivity.Java;

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();
        }
    });
}
}
9
Batuhan Coşkun

Vous demandez de cliquer sur l'élément (pas sur le bouton à l'intérieur de l'élément), vous devez donc modifier la présentation XML de votre enfant. 

de 

<?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>

à

<?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" />

ou vous pouvez ajouter ClickListener à l'intérieur de l'adaptateur

@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;
}
3
Jack K Fouani

GridView est cliquable, pas besoin de mettre le bouton dans GridView.

Pour ajouter un auditeur à la grille, ajoutez le code suivant:

// 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;

        }
    }
}); 

Et ainsi de suite, vous pouvez ajouter tous les chiffres dans les cas.

8
Mohammed Saleem

Si vous voulez obtenir le texte sur lequel vous avez cliqué, vous pouvez utiliser ceci 

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

            }
        });
1
E J Chathuranga

Je vous suggère d'ajouter un écouteur de clic dans la méthode getview plutôt que d'ajouter une classe d'activité . Essayez ce 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;
}
0
Dilip Malviya

Dans votre CustomAdapter en 

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

}

0
Apple Appala