Domanda

Ho un GridView con personalizzato View in esso, che è un Button e a TextView. Ho definito il setOnItemClickListener Ma sembra che non sia mai stato invocato, si prega di vedere le pace del codice qui sotto.

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

gridview.setOnItemClickListener(new OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView<?> parent, View view, 
            int position, long id) {
        Toast.makeText(getApplicationContext(), "gadsfadsf", 
            Toast.LENGTH_SHORT).show();
        Log.d("Main", "onItemClick");
    }
});
È stato utile?

Soluzione

Ho avuto lo stesso problema. Anche se non ho ancora capito perché non viene mai invocato, posso proporre una soluzione alternativa.

Invece di impostare OnClickListener sulla tua gridview, impostalo sul pulsante stesso all'interno del metodo GridaDapter, all'interno del tuo metodo getView ().

Che ha funzionato per me!

Altri suggerimenti

La risposta marcata è una specie di hack. Invece di impostare un OnClickListener sul pulsante Basta assicurarsi, che il pulsante e il TextView abbiano la seguente proprietà:

android:clickable="false"

Potrebbe essere che alcuni elementi nella tua gridview stiano rubando attenzione. Prova ad aggiungere questi attributi a tutti gli elementi che hai all'interno della griglia:

android:focusable="false"
android:focusableInTouchMode="false"

Invece di impostare il file onClickListener sul tuo GridView,
Impostalo su Button se stesso dentro il tuo GridAdapter, dentro il tuo getView() metodo.

Che ha funzionato per me!

Ho avuto lo stesso problema, l'evento grid.itemClickListener non è mai stato lanciato.

Nel mio caso avevo due ascoltatori: grid.itemClickListener e un altro clickListener attaccato a a Button All'interno del layout dell'articolo.

Dopo aver armeggiato il layout per un po ', mi sono reso conto che se c'era un widget, all'interno del layout dell'oggetto, con focusable=true, poi itemClickListener non è mai stato lanciato. Il clickListener allegato a Button ha funzionato bene però.

Forse quello era il tuo caso. Ad ogni modo, penso che queste informazioni potrebbero essere utili per gli altri utenti che si svolgono nello stesso problema.

Grazie a CodingUser

Quello che stavamo facendo è accedere direttamente al layout all'interno della Gridview, quindi OnitemClickListener trova confuso accedere all'articolo.

Quindi la soluzione è applicare il sulicklistener all'interno dell'adattatore (cioè normalmente ArrayAdapter)

Quindi quello che sto cercando di dire è:

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

            //Here row is a view and we can set OnClickListener on this
    final View row;
    ViewHolder holder = null;

    if (convertView == null) {
        LayoutInflater inflater = ((Activity) context).getLayoutInflater();
        //Here we inflate the layout to view (linear in my case)
        row = inflater.inflate(layoutResourceId, parent, false);
        holder = new ViewHolder();
        holder.imageTitle = (TextView) row.findViewById(R.id.text);
        holder.image = (ImageView) row.findViewById(R.id.image);
        row.setTag(holder);
    } else {
        row = convertView;
        holder = (ViewHolder) row.getTag();
    }

    ImageItem item = data.get(position);
    holder.imageTitle.setText(item.getTitle());
    holder.image.setImageBitmap(item.getImage());

    //Now get the id or whatever needed
    row.setId(position);
    // Now set the onClickListener
    row.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            Toast.makeText(context, "Clicked" + row.getId() + "!!",
                    Toast.LENGTH_SHORT).show();
        }
    });
    return row;
}

Puoi impostare OnClick per la visualizzazione nell'adattatore di Gridview. Funziona per me.

public View getView(final int position, View convertView, ViewGroup parent) {
    ObjMenuVideo objListVideo = mListMenuVideo.get(position);
    final ViewHolder holder;
    if (convertView == null) {
        holder = new ViewHolder();
        inflater = (LayoutInflater) mContext
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = inflater.inflate(R.layout.item_video_of_kind, null);
        holder.tv_number_views = (TextView) convertView
        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }
    holder.tv_number_views.setText(String.valueOf(objListVideo.getViews()));
    convertView.setId(position);
    convertView.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            Intent menuVideoIntent = new Intent(mContext,
                    ActivityDetailVideo.class);
            mContext.startActivity(menuVideoIntent);
        }
    });

    return convertView;
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top