安卓列表视图行重复项目[英] Android Listview row repeating item

问题描述

我有一个列表,其中我从共享首选项上获得的特定号码(位置)应该显示ImageView(表示当前正在播放的歌曲).但我得到了这个职位,但该项目也在其他行上显示.当我滚动列表时,会出现问题.

*当我退出另一个活动时,这正在发生,然后在我的恢复我:

@Override
protected void onResume() {
    super.onResume();
    if(AlbumDetails.mediaPlayer!=null)
    adapter = new PlaylistAdapter(this, songs);
    list.setAdapter(adapter);
}

这是我的代码:

public class PlaylistAdapter extends BaseAdapter {

    private Activity activity;
    private static LayoutInflater inflater = null;
    private ArrayList<Songs> data;
    private DatabaseHelper db;
    private SharedPreferences prefs;
    int playpos;

    public PlaylistAdapter(Activity a, ArrayList<Songs> songs) {
        activity = a;
        data = songs;
        db = new DatabaseHelper(a);
        inflater = (LayoutInflater) activity
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        prefs = activity.getSharedPreferences("com.darkovski.quran",
                Context.MODE_PRIVATE);
        playpos = prefs.getInt("posPlaying", -1);
    }

    public int getCount() {
        return data.size();
    }

    public Object getItem(int position) {
        return position;
    }

    public long getItemId(int position) {
        return position;
    }

    public View getView(final int position, View convertView,
            final ViewGroup parent) {
        View vi = convertView;
        if (convertView == null)
            vi = inflater.inflate(R.layout.song_item, parent, false);

        ImageView download = (ImageView) vi
                .findViewById(R.id.playlist_item_download);
        db.openDB();
        if (db.isDownloaded(data.get(position).getNumber(), data.get(position)
                .getRecitorName(), data.get(position).getRecitorID()))
            download.setImageResource(R.drawable.download_yes);
        else {
            download.setImageResource(R.drawable.download_no);
            download.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {

                    new DownloadFileFromURL(activity, data.get(position)
                            .getRecitorName(), data.get(position).getTitle(),
                            data.get(position).getLink(), data.get(position)
                                    .getNumber(), data.get(position)
                                    .getRecitorID()).execute();
                    if (!db.isDBOpen())
                        db.openDB();
                    db.addDownloaded(data.get(position).getNumber(),
                            data.get(position).getLink(), 0, data.get(position)
                                    .getRecitorID(), "", data.get(position)
                                    .getTitle());

                    Toast.makeText(activity,
                            "Downloading " + data.get(position).getTitle(),
                            Toast.LENGTH_SHORT).show();

                }
            });
        }
        db.closeDB();

        TextView number = (TextView) vi.findViewById(R.id.playlist_item_num);
        TextView title = (TextView) vi.findViewById(R.id.playlist_item_reciter);
        title.setText(data.get(position).getTitle());
        number.setText((position + 1) + "");
        ImageView eq = (ImageView) vi.findViewById(R.id.playlist_item_equlizer);
        //this is where i show the item
        if (playpos == position) {
            eq.setVisibility(View.VISIBLE);
        }

        return vi;
    }
}

,这是它看起来的:

在此处输入图像描述

推荐答案

它因为这个陈述

if (playpos == position) {
        eq.setVisibility(View.VISIBLE);
    }

listview回收视图,因此如果您注意到第一行,最后一行显示相同.这是因为第一行被回收到最后一行

您可以通过添加别人来解决此问题,如果它看起来像

if (playpos == position) {
        eq.setVisibility(View.VISIBLE);
}else{
    eq.setVisibility(View.GONE);
}

其他推荐答案

如果您在适配器类中延伸BaseAdapter,则此解决方案将起作用. https://stackoverflow.com/a/28791031/4531507

本文地址:https://www.itbaoku.cn/post/978428.html