2013-12-17 5 views
1

У меня есть список, где на конкретном номере (позиции), который я получаю из общих настроек, должно отображаться изображение (указывает, какая песня в данный момент воспроизводится). Но я получаю позицию, но этот элемент отображается и на других строках. Проблема возникает, когда я просматриваю список.Android Listview row repeating item

* Это происходит, когда я выйти другой деятельности, и по моему на резюме я к этому:

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

И вот как это выглядит:

enter image description here

+0

Принять ответ, если вы нашли его полезным. Это не магазин Barbour ... – Triode

+0

@Triode, если u прокрутите вниз, вы увидите, что есть принятый ответ –

ответ

7

его из-за этого заявления

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

listview перерабатывает виды, поэтому, если вы заметили, что первая строка и последняя строка показывают то же самое. Это происходит потому, что первый ряд был возвращен в последнюю строку

вы можете исправить это путем добавления еще на то, если так будет выглядеть

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

Soo easy - почему я об этом не думал :) Спасибо! –