Android:ListView问题在TextView中更改文本旁边的图像时

时间:2010-12-06 07:16:39

标签: android listview

我正在开发一个扩展ListActivity的音板应用程序。我有一个播放按钮图像和旁边的文字。现在,当用户点击文本视图时,我使用以下代码更改播放图像以暂停图像。

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
  try
    {
    setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, Sounds));
     final ListView lv = getListView();
     lv.setTextFilterEnabled(true);
     lv.setCacheColorHint(Color.WHITE);
     lv.setSoundEffectsEnabled(false);
     lv.setFastScrollEnabled(true);
     lv.setFocusableInTouchMode(true);
     lv.setBackgroundColor(Color.WHITE);
  lv.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View view,
           int position, long id) {
          TextView tv1 = (TextView) view;
           int u = (int)meMap.get(position+1); // meMap--> HashMap which contains corresponding resids
           playSample(u,tv1);

       }
     });    
}
private void playSample(int resid,TextView ttvv)
{
final Resources res = getBaseContext().getResources();
    final Drawable myImage = res.getDrawable(R.drawable.pause);
  //  myImage.
    final Drawable myImage1 = res.getDrawable(R.drawable.play);

    MediaPlayer.OnCompletionListener listener = new MediaPlayer.OnCompletionListener(){
  public void onCompletion(MediaPlayer mp) {
 // tv --> (TextView) view; From onItemClick(AdapterView<?> parent, View view,int position, long id)
     tv.setCompoundDrawablesWithIntrinsicBounds(myImage1, null, null, null);

      }
    };

此代码有效,但我注意到一个小错误。假设我在列表中选择第三行,播放图像会更改为暂停图像,如果我在播放时滚动列表,我可以看到第二个滚动页面的第三行,第三个滚动页面的第三行和这样就会受到影响,即它们也会改变为暂停图像。为什么会这样?难道我做错了什么?我希望你理解我的问题。非常感谢您的帮助。感谢。

1 个答案:

答案 0 :(得分:1)

我有一个类似的UI(在列表视图中播放/暂停)。我通过在列表视图中使用ToggleButtons并将背景设置为xml drawable来避免你所讨论的问题,如下所示: 创建一个文件drawable / play_pause_toggle.xml:

<?xml version="1.0" encoding="utf-8"?>
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
     <item android:state_enabled="false"
           android:drawable="@drawable/pause"/>
     <item android:state_checked="true" 
           android:drawable="@drawable/pause" />
     <item android:state_focused="true"
           android:drawable="@drawable/pause" />
     <item android:drawable="@drawable/play" />
 </selector>

然后将ToggleButton背景设置为@ drawable / play_pause_toggle。每次ToggleButtons isChecked状态更改时它都会自动更改