У меня есть следующее LinearLayout
с GridView
в нем:
<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>
Данные GridView
предоставляются настраиваемым адаптером (с использованием простого 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;
}
}
Когда приложение запускается, оно получает список песен (из xml, но в настоящее время использует список, введенный вручную) и передает его в адаптер my, а затем устанавливает 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);
}
}
});
Когда я впервые реализовал этот код, все работало нормально, и я уверен, что ничего не изменил. Я пытался сделать текст для прокрутки названия песни шатерным способом, если он был слишком длинным, но не мог заставить его работать. На этом этапе я обнаружил, что щелчок перестал работать. Теперь я удалил (я верю) весь этот код, но он все еще не работает.
Когда я касаюсь / щелкаю (как вы это называете), ничего не происходит. без ошибок ничего.
Что-то не так с моим кодом, что может вызвать эту проблему?