Tengo el siguiente LinearLayout
con un GridView
en ella:GridView Android no hace clic en que se detecte
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<GridView
android:id="@+id/songs_grid"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true"
android:columnWidth="250dp"
android:gravity="center"
android:horizontalSpacing="10dp"
android:numColumns="auto_fit"
android:verticalSpacing="10dp" />
</LinearLayout>
Los datos GridView
es suministrada por un adaptador personalizado (usando un simple ViewHolder
):
public class SongsAdapter extends BaseAdapter {
private Context context;
private LayoutInflater mInflater;
private ArrayList<Song> songList;
public SongsAdapter(Context context, ArrayList<Song> songList)
{
this.context = context;
this.songList = songList;
mInflater = LayoutInflater.from(this.context);
}
@Override
public int getCount()
{
return songList.size();
}
public Object getItem(int position)
{
return songList.get(position);
}
public long getItemId(int position)
{
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
SongViewHolder viewHolder;
if (convertView == null)
{
convertView = mInflater.inflate(R.layout.song_list_item, null);
viewHolder = new SongViewHolder();
//Get Views from Layout Template
viewHolder.AlbumArt = (ImageView)convertView.findViewById(R.id.albumart);
viewHolder.Title = (TextView)convertView.findViewById(R.id.title);
viewHolder.Artist = (TextView)convertView.findViewById(R.id.artist);
}
else
{
viewHolder = (SongViewHolder) convertView.getTag();
}
Song song = songList.get(position);
Bitmap bitmap = song.getAlbumArt();
Bitmap missing = BitmapFactory.decodeResource(context.getResources(), R.drawable.albumart_missing);
Bitmap albumArt = bitmap == null ? missing : bitmap;
viewHolder.AlbumArt.setImageBitmap(albumArt);
viewHolder.Title.setText(song.getTitle());
viewHolder.Artist.setText(song.getArtist());
convertView.setTag(viewHolder);
return convertView;
}
}
Cuando se inicia la aplicación, obtiene una lista de canciones (de xml pero actualmente usa una lista ingresada manualmente) y la pasa al adaptador my y luego configura el OnItemClickListener
:
GridView gridView = (GridView) findViewById(R.id.songs_grid);
gridView.setAdapter(new SongsAdapter(this, fk.getSongList()));
gridView.setOnItemClickListener(new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
{
LinearLayout layout = (LinearLayout)view;
TextView songTitle = (TextView)layout.findViewById(R.id.song_title);
Song song = fk.getSong((String) songTitle.getText());
if(song != null)
{
Intent play = new Intent(getBaseContext(), Play.class);
startActivity(play);
}
}
});
Cuando implementé por primera vez este código, todo funcionó bien, y estoy seguro de que no he cambiado nada. Intentaba hacer que el texto del título de la canción se desplazara en marquesina si era demasiado largo, pero no conseguí que funcionara. Durante esta fase, descubrí que el clic dejó de funcionar. Ahora eliminé (creo) todo ese código, pero aún falla.
Cuando toco/hace clic (como lo llame) no sucede nada. sin errores nada
¿Hay algún problema con mi código que pueda causar este problema?
No estoy del todo seguro, así que solo lo publicaré como comentario; Elimine el atributo cliqueable de la vista de cuadrícula. Creo que esto puede anular los eventos de clic para los elementos en la vista: – Jave
Intente agregar un registro para verificar si se llama a OnClickClick. En caso afirmativo, verifique el valor de songPackage. –
@Jave lamentablemente no, creo que lo agregué para tratar de hacerlo funcionar, ¡pero eliminarlo todavía no funcionaba! :(¡gracias! – neildeadman