2012-12-20 32 views
0

我想单击时更改列表项目的背景,但它不起作用。点击时我无法更改列表项目的背景

这是我MusicAdapter内部类:

class MusicAdapter extends ArrayAdapter<String>{ 
     Fill fill=null; 
     public MusicAdapter(){ 
      super(GetMusics.this,android.R.layout.simple_list_item_1,song_list); 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      // TODO Auto-generated method stub 

      row = convertView; 
      if(row==null){ 
       LayoutInflater inflater = getLayoutInflater(); 
       row = inflater.inflate(R.layout.row, null); 
       fill=new Fill(row); 
       row.setTag(fill); 
      }else{ 
       fill=(Fill)row.getTag(); 
      } 
      row.setBackgroundResource(R.drawable.list_selector); 
      fill.setRow(song_list.get(position)); 
      return row; 
     } 
    } 

我也试过,但同样没有奏效:

private AdapterView.OnItemClickListener onItemClick = new AdapterView.OnItemClickListener() { 

    @Override 
    public void onItemClick(AdapterView<?> arg0, View v, int arg2, 
      long arg3) { 
     // TODO Auto-generated method stub 
     lv.getChildAt(arg2).setBackgroundResource(R.drawable.list_selector); 
    } 
}; 

这里是我的list_selector.xml:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item android:state_focused="true" 
     android:drawable="@color/Peru"/> 
    <item android:state_pressed="true" 
     android:drawable="@color/Tan"/> 
    <item 
     android:drawable="@color/Peru"/> 
</selector> 

你有什么建议吗?

+0

做用户点击一次后永久保存吗?你的'list_selector.xml'做前者。如果你想做后者,你必须用普通的drawable而不是选择器来调用'setBackgroundResource()'。 – CloudyMusic

回答

0

onItemClick()通过视图你需要改变已经的背景。在那里设置背景。

@Override 
public void onItemClick(AdapterView<?> arg0, View v, int arg2, 
     long arg3) { 
    v.setBackgroundResource(R.drawable.list_selector); 
} 
+0

我试过,但再次不起作用 –

+0

我设法做到了这一点,谢谢 –

+0

你能接受,如果它是正确的吗?谢谢! –

0

必须使用一种叫做Selector并将其设置为ListSelector,请参考这个问题,你希望背景,而该项目正在积极压上唯一的改变,或改变Android ListView Selector Color