【问题标题】:Android Listview row repeating itemAndroid Listview 行重复项
【发布时间】:2014-01-05 10:34:56
【问题描述】:

我有一个列表,在我从共享首选项中获得的特定数字(位置)上应该显示一个图像视图(指示当前正在播放的歌曲)。但我得到了位置,但该项目也显示在其他行上。滚动列表时出现问题。

*当我退出另一个活动时会发生这种情况,并且在我恢复时我会这样做:

@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;
    }
}

这就是它的外观:

【问题讨论】:

  • 如果您发现它有帮助,请接受答案。这不是巴伯店……
  • @Triode 如果你向下滚动你会看到有一个接受的答案

标签: java android android-listview android-adapter


【解决方案1】:

因为这句话

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

列表视图回收视图,因此如果您注意到第一行和最后一行显示相同。那是因为第一行被回收到了最后一行

你可以通过在 if 上添加 else 来解决这个问题,这样它看起来像

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

【讨论】:

  • 太容易了——为什么我没想到 :) 谢谢!
【解决方案2】:

如果您在 Adapter 类中扩展 BaseAdapter,那么此解决方案将起作用。 https://stackoverflow.com/a/28791031/4531507

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-20
    • 2011-11-29
    • 2019-02-05
    • 1970-01-01
    • 2018-03-25
    • 2014-06-13
    • 1970-01-01
    • 2011-11-11
    相关资源
    最近更新 更多