我正在構建一個Android應用程序,並且作爲它的一部分,我正在顯示帶複選框的歌曲列表以供選擇。我正在使用自定義列表適配器來執行此操作。代碼似乎加載並與複選框一起工作,但唯一的問題是,只有列表視圖中的最頂層項才顯示文本,直到我向下滾動列表,然後其他項呈現文本。僅限Android ListView顯示滾動後的項目
我知道這可能是一個問題,而不是刷新或類似的東西,但我不知道如何解決它。
繼承人爲我的適配器代碼:
private class PlaylistDetailsAdapter extends ArrayAdapter<Song> {
boolean[] checkBoxState;
ViewHolder viewHolder;
public PlaylistDetailsAdapter(Context context, int textViewResourceId, ArrayList<Song> songs) {
super(context, textViewResourceId, songs);
checkBoxState = new boolean[songs.size()];
}
private class ViewHolder {
TextView songName;
CheckBox checkBox;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = inflater.inflate(R.layout.activity_playlist_details_row, null);
viewHolder = new ViewHolder();
viewHolder.songName = (TextView)convertView.findViewById(R.id.playlist_details_song_name);
viewHolder.checkBox = (CheckBox)convertView.findViewById(R.id.playlist_details_checkbox);
convertView.setTag(viewHolder);
}
else {
viewHolder = (ViewHolder)convertView.getTag();
Song song = playlistSongs.get(position);
viewHolder.songName.setText(song.getTitle() + " - " + song.getArtist());
viewHolder.checkBox.setChecked(checkBoxState[position]);
viewHolder.checkBox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (((CheckBox)v).isChecked()) {
checkBoxState[position] = true;
}
else {
checkBoxState[position] = false;
}
}
});
}
return convertView;
}
}
這是建立在列表視圖代碼:
playlistSongs = db.getPlaylistTracks(getIntent().getLongExtra("id", 0));
TextView playlistName = (TextView)findViewById(R.id.playlist_details_name);
playlistName.setText(getIntent().getStringExtra("name"));
final PlaylistDetailsAdapter adapter = new PlaylistDetailsAdapter(this, R.layout.activity_playlist_details_row, playlistSongs);
ListView playlistSongList = (ListView)findViewById(R.id.listview_playlist_details);
playlistSongList.setAdapter(adapter);
任何幫助將不勝感激。
感謝
的getView方法是造成這一點,我不知道爲什麼在那一刻,但我有同樣的問題,它是由Android元素的可重複使用的設計造成的。 – Nickolaus 2013-02-15 12:00:26