2012-08-02 34 views
1

在我的應用程序中,我想要在ListView中選擇的項目具有不同的背景。事實上,我沒有一個簡單的ListView,它的ListFragment其中我通過getListView()方法得到我的ListView。我編程應用的選擇,如:針對所選清單項目的不同背景

ListView listview = getListView(); 
listview.setSelector(R.drawable.tablet_settings_list_selector); 

而且列表選擇XML是什麼樣子,

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:state_pressed="false" android:state_focused="false" 
    android:drawable="@drawable/tablet_menu_panel" /> 
<item android:state_pressed="true" android:state_focused="true" 
    android:drawable="@drawable/tablet_menu_panel_ontap" /> 
<item android:state_activated="true" 
    android:drawable="@drawable/tablet_selected_menu" /> 
</selector> 

這是我的列表看起來應該像:

ListView with different background for selected item

,你可以看到,選定的列表項具有不同的背景,向外箭頭。那麼我怎麼能做到這一點?

+0

突出的箭頭是在另一個片段? – Luksprog 2012-08-02 07:48:54

+1

http://stackoverflow.com/questions/2562051/listview-item-background-via-custom-selector看這裏 – Waqas 2012-08-02 07:55:14

+0

@Luksprog:是的。這就是爲什麼它有點問題。 – Rajkiran 2012-08-02 09:52:11

回答

0

最後我得出結論,您不能在ListViewListFragment中設置永久選中的項目。因此,我寫了我的自定義BaseAdapter並解決了我的問題:) 對於面臨類似問題的人,這裏是我的BaseAdapter,重點在getView()方法。

public class ListFragmentListAdapter extends BaseAdapter { 

String[] items; 
Context _context = null; 
private TabletFragment _tabletFragmentChild; 

public ListFragmentListAdapter(Context context, TabletFragment tabletFragmentChild, String[] items) { 
    this.items = items; 
    this._context = context; 
    this._tabletFragmentChild = tabletFragmentChild; 
} 

    //---------------------MOST IMPORTATNT PART---------------------- 
@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    if (convertView == null) { 
     convertView = LayoutInflater.from(_context).inflate(R.layout.tablet_listfragment_list_item, null); 
    } 

    TextView textview = (TextView) convertView.findViewById(R.id.tv_listfragment_list_item); 
    textview.setText(items[position]); 

    convertView.setBackgroundDrawable(null); 
    textview.setTextColor(_context.getResources().getColor(R.color.white)); 

    if(position == _tabletFragmentChild.getSelectedItemIndex()){ 
     convertView.setBackgroundResource(R.drawable.tablet_selected1_menu); 
     textview.setTextColor(Color.BLACK); 
    } 
    return convertView; 
} 
    //------------------------END OF IMP PART0------------------------ 

@Override 
public long getItemId(int position) { 

    return position; 
} 

@Override 
public Object getItem(int position) { 
    return items[position]; 
} 

@Override 
public int getCount() { 

    if (items == null) 
     return 0; 

    return items.length; 
} 
}