1

在我的应用程序中,我希望在ListView. 事实上,我没有一个普通的 ListView,我通过方法ListFragment从中获取我的 ListView 。getListView()我以编程方式应用了选择器,例如:

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

如您所见,所选列表项具有不同的背景,并带有一个向外的箭头。那么我该如何实现呢?

4

1 回答 1

0

最后我得出一个结论,您不能在 aListView或中设置永远选择的项目ListFragment。因此,为此,我编写了我的自定义 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;
}
}
于 2012-08-23T06:25:10.777 回答