Android问题与ListView的OnItemClickListener有关

时间:2011-08-25 09:26:46

标签: android listview imageview onitemclicklistener

我的布局中有一个ListView。这是列表项的布局。

shopitem.xml

<?xml version="1.0" encoding="utf-8"?>
<TwoLineListItem xmlns:android="http://schemas.android.com/apk/res/android" 
    android:paddingTop="2dip"
    android:paddingBottom="2dip"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:mode="twoLine"> 
    <TextView xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/text1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:paddingTop="6dip"
        android:paddingLeft="44dip"
        android:textStyle="bold" 
        android:lines="1"
        android:textColor="#FFFFFF"/>
    <ImageView
            android:id="@+id/playBtn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="3dip"
            android:layout_alignRight="@android:id/text1"
            android:src="@drawable/btnplaypreview"/>            
</TwoLineListItem>

现在我想在playBtn OnItemClickListener中设置一些图像更改。为此,我使用以下代码。

ListView shopActivityListView = (ListView) findViewById(R.id.shopActivityListView);
shopActivityListView.setCacheColorHint(Color.TRANSPARENT);
shopActivityListView.setAdapter(new ArrayAdapter<String>(getApplicationContext(), R.layout.shopitem, trackArr[1]));

shopActivityListView.setOnItemClickListener(new OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> parent, View vItem, int position, long id) {
    // TODO Auto-generated method stub
    ImageView playBtn = (ImageView) vItem.findViewById(R.id.playBtn);
    playBtn.setImageResource(R.drawable.eq12);
}                
});

但是在itemclick上没有发生任何事情。我检查过onItemClick方法正在执行,没有任何异常。但没有任何改变。我的代码有什么问题?

1 个答案:

答案 0 :(得分:0)

Listview的任何项目中的图像都不能直接更改,因为它由适配器控制。只有适配器的getView()方法可以设置项目中的任何视图。 因此,在onItemClick方法中,我们必须设置position特定标志,然后为适配器调用notifyDataSetChanged()。此外,需要一个自定义适配器,我们必须定义getView()方法,以便我们根据上面的position特定标志设置图像。