gpt4 book ai didi

Android ListView 滚动后只显示项目

转载 作者:太空宇宙 更新时间:2023-11-03 12:58:45 25 4
gpt4 key购买 nike

我正在构建一个 Android 应用程序,作为其中的一部分,我将显示一个带有复选框的歌曲列表以供选择。我正在使用自定义列表适配器来执行此操作。代码似乎加载并使用复选框,但我遇到的唯一问题是只有 ListView 中最顶部的项目显示文本,直到我向下滚动列表,然后其他项目呈现文本。

我知道这可能是 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;
}

}

这是设置 ListView 的代码:

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

如有任何帮助,我们将不胜感激。

谢谢

最佳答案

问题是当 convertView==null 时你没有将数据放入 View 中,您只需设置如何找到它们。

您需要做的是从“else”部分中删除实际更改 View 的代码,并将其放在整个 if-else 区域之后。

例子:

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
if (convertView == null) {
...
}
else
viewHolder = (ViewHolder)convertView.getTag();
// now we have the views ready to be changed , so change them :
Song song = playlistSongs.get(position);
...
return convertView;
}

关于Android ListView 滚动后只显示项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14894215/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com