2013-07-23 62 views
0

我無法找到問題,每當我滾動視圖將改變.pls幫我出...噸認爲Android的回收視圖如何重寫?列表視圖自動更改視圖?

1.BEFORE SCROLLING2.AFTER SCROLLING
BEFORE SCROLLINGenter image description here

 public class MobileArrayAdapter extends ArrayAdapter<String> { 
private final Context context; 
private final String[] values; 
private LayoutInflater inflater; 

public MobileArrayAdapter(Context context, String[] values) { 
    super(context, R.layout.list_mobile, values); 
     inflater = LayoutInflater.from(context); 
    this.context = context; 
    this.values = values; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View rowView=convertView; 
    if (rowView == null) { 

     rowView = inflater.inflate(R.layout.list_mobile, null); 
     ViewHolder viewHolder = new ViewHolder(); 
     viewHolder.text = (TextView) rowView.findViewById(R.id.label); 
       viewHolder.button = (ImageView) rowView 
      .findViewById(R.id.logo); 

     rowView.setTag(viewHolder); 
     } 

     ViewHolder holder = (ViewHolder) rowView.getTag(); 
     String s = values[position]; 

     holder.text.setText(s); 
       if (mp.isPlaying()) { 
       holder.imageView.setImageResource(R.drawable.stop); 
      } else { 
       holder.imageView.setImageResource(R.drawable.play); 
      } 


    return rowView; 
}static class ViewHolder { 
     public TextView text; 
     public ImageView button; 

    } 

}

在主要活動

  protected void onListItemClick(ListView l, View v, int pos, long id) { 





     if(mp.isPlaying() && itemno == pos){ 

     mp.pause(); 



     playing= true; 

     ListMobileActivity.this. imageView.setImageResource(R.drawable.play); 



     } 
     else if (playing=true && itemno== pos){ 
      mp.start(); 
      playing=false; 


      ListMobileActivity.this.imageView.setImageResource(R.drawable.stop); 
     } 


     if (mp.isPlaying()&& itemno!=pos){ 
      ListMobileActivity.this.imageView.setImageResource(R.drawable.play); 


     } 

    if (itemno!=pos) 
    { 




      imageView = (ImageView)v. findViewWithTag(pos); 




      playSample(pos); 
     }    
     ListMobileActivity.this.itemno=pos; 

     //Variable i, here, is from a for loop. 



} 

private void playSample(int position) 
    { 

      AssetFileDescriptor afd = getApplicationContext().getResources().openRawResourceFd(songs[position]); 


      try{ 
       if(mp.isPlaying()) 


       ListMobileActivity. this.mp.stop(); 






      ListMobileActivity. this.mp.reset(); 
      ListMobileActivity. this.mp.setDataSource(afd.getFileDescriptor(),   afd.getStartOffset(), afd.getDeclaredLength()); 
      ListMobileActivity. this.mp.prepare(); 

ListMobileActivity. this. imageView.setImageResource(R.drawable.stop); 


     ListMobileActivity.this. mp.setOnCompletionListener(new OnCompletionListener() { 

       public void onCompletion(MediaPlayer mp) { 

        ListMobileActivity. this. imageView.setImageResource(R.drawable.play); 


       } 


       }); 

     ListMobileActivity. this. mp.start(); 

       afd.close(); 



     } 
     catch (IllegalArgumentException e) 
     { 
      Log.e(TAG, "Unable to play audio queue do to exception: " + e.getMessage(), e); 
     } 
     catch (IllegalStateException e) 
     { 
      Log.e(TAG, "Unable to play audio queue do to exception: " + e.getMessage(), e); 
     } 
     catch (IOException e) 
     { 
      Log.e(TAG, "Unable to play audio queue do to exception: " + e.getMessage(), e); 
     } 
} 
+0

你有一個視圖回收的錯誤。發佈您的適配器代碼。 – Leonidos

+0

@Leonidos now see.i added .. – Asthme

+1

getView()中應該有代碼設置正確的holder.button狀態。 – Leonidos

回答

0

我認爲你是使用自定義佈局來查看列表項目。

所以現在發生的是當你使用自定義佈局,所以它會膨脹佈局,它將被用於下一個項目。

所以不要在自定義適配器的get視圖檢查條件是,類似這樣的東西..

if(Song2.isplaying) 
{ 
    imgView.setImage(pauseimage); 
} 
else 
{ 
    imgView.setImage(playimage); 
} 

它會爲你工作。

(它只是代碼邏輯表示所以檢查的標準需要由你來設置。)您使用array[]的列表視圖顯示

+0

你必須檢查所有歌曲並根據它設置圖像。希望能幫助到你!! –

+0

我試過了,它不適合我,只要我按下播放按鈕,圖像就會變化,然後向下滾動,得到舊圖像,就像你上面提到的那樣。 – Asthme

+0

你是否檢查過你應用的條件是否正確?用您在適配器類中所做的更改更新您的問題。 –

0

1.Here和嘗試也顯示ImageView

String s = values[position]; 
holder.text.setText(s); 

2 。所以首先檢查setImage

if (s.startsWith("al")) { 
     holder.image.setImageResource(R.drawable.baloon); 
    } else { 
     holder.image.setImageResource(R.drawable.pause); 
    } 

值3.Otherwise你應該做一個custome適配器

+0

它不工作 – Asthme