2011-08-25 56 views
0

我在我的佈局中有一個ListView。這是列表項目的佈局。Android問題相關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方法正在執行,沒有任何異常。但沒有什麼改變。我的代碼中有什麼問題?

+0

TwoLineListItem是一個linearlayout擴展嗎?嘗試添加'android:clickable =「true」' –

+0

我試過了。不用找了。 –

+0

playBtn.setImageResource(R.drawable.eq12);無效後,您的列表視圖。 –

回答

0

任何Listview項目中的圖像都不能直接更改,因爲它由適配器控制。只有getView()適配器的方法可以設置項目中的任何視圖。 因此,在onItemClick方法中,我們必須設置一個position特定標誌,然後調用適配器的notifyDataSetChanged()。此外,還需要一個自定義適配器,我們必須定義getView()方法,以便根據上述position特定標誌設置圖像。

+0

請你舉個例子 –