我正在开发一个扩展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);
}
};
此代码有效,但我注意到一个小错误。假设我在列表中选择第三行,播放图像会更改为暂停图像,如果我在播放时滚动列表,我可以看到第二个滚动页面的第三行,第三个滚动页面的第三行和这样就会受到影响,即它们也会改变为暂停图像。为什么会这样?难道我做错了什么?我希望你理解我的问题。非常感谢您的帮助。感谢。
答案 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状态更改时它都会自动更改