2014-08-31 84 views
0

我在我的android項目中使用ListFragment。我決定做一個listView,每個listview項目包含音樂頻率imageView。我會嘗試設置音樂頻率的imageView動畫。每個listView都有一個叫做play的按鈕,一旦播放被點擊,音樂頻率開始動畫。ImageView上的setBackgroundResource返回null

public View onCreateView(LayoutInflater inflater, 
     ViewGroup container, Bundle savedInstanceState) { 
    View v = inflater.inflate(R.layout.fragmentmusiclist, container, false); 
    lv = (ListView) v.findViewById(R.id.list); 


    mp = new MediaPlayer(); 
    mp = null; 

    Song s1 = new Song("Love Story",(float) 2.5, onMusicPlayListener); 
    Song s2 = new Song("Sad Story",(float) 1.0, onMusicPlayListener); 
    Song s3 = new Song("Breakup Story",(float) 3.5, onMusicPlayListener); 

    songs = new ArrayList<Song>(); 
    songs.add(s1); 
    songs.add(s2); 
    songs.add(s3); 

    adapter = new MusicListAdapter(getActivity(),songs); 
    setListAdapter(adapter); 


    return super.onCreateView(inflater, container, savedInstanceState); 
} 

OnClickListener onMusicPlayListener = new OnClickListener() { 

@Override 
public void onClick(View v) { 
    final int position = getListView().getPositionForView((LinearLayout)v.getParent()); 
    animMusicFreq = (ImageView) v.findViewById(R.id.music_anim); 
    animMusicFreq.setBackgroundResource(R.anim.anim_music); 
    animMusicFreq.post(new Runnable() { 

    @Override 
    public void run() { 
     AnimationDrawable frameAnimation = 
      (AnimationDrawable) animMusicFreq.getBackground(); 
        frameAnimation.start(); 
    } 

}); 

回答

1

你膨脹您的視圖中onCreateView,但你不將它傳遞給系統。相反,你告訴它膨脹自己(你回報super)。這沒有任何意義。

你應該回到你的v視圖像這樣:

public View onCreateView(LayoutInflater inflater, 
         ViewGroup container, Bundle savedInstanceState) { 
    View v = inflater.inflate(R.layout.fragmentmusiclist, container, false); 
    // ... 
    return v; 
}