0

ListView我正在使用带有simle_list_item_multiple_choice项目布局和自定义适配器的标准 android 。它保存了它在暂停时声明并在恢复时恢复。但是经过几天的工作,我已经在我的适配器中实现了接口,并SectionIndexer从这个更改为。应用程序中还有其他更改,但这些更改仅附加到. 但是,现在当我的应用程序恢复工作时,列表视图将滚动到开始并且所有项目都未选中。我试图删除界面和粘性标题支持,但没有效果。也许我需要启用一些隐藏的列表视图选项?StickyListHeadersAdapterListViewStickyListHeadersListViewListViewSectionIndexer

(试过的saveState财产 - 没有效果)

public class WordAdapter extends ArrayAdapter<Word> implements SectionIndexer, StickyListHeadersAdapter{
// -----------------------------------------------------------------------
//
// Fields
//
// -----------------------------------------------------------------------
private int mResID;

private List<Word> mList;
private String[] mSectionNames;
private StickyListHeadersListView mListView;
private int[] mSectionIndexes;
private boolean mHeadersEnabled;

// -----------------------------------------------------------------------
//
// Constructor
//
// -----------------------------------------------------------------------
public WordAdapter(Context context, StickyListHeadersListView listView, int resID, List<Word> list, String[] sectionNames, int[] sectionIndexes, boolean enableHeaders) {
    super(context, resID, list);
    mResID = resID;

    mList = list;
    mListView = listView;
    mSectionIndexes = sectionIndexes;
    mSectionNames = sectionNames;

    mHeadersEnabled = enableHeaders;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    if (convertView == null) {
        convertView = LayoutInflater.from(getContext()).inflate(mResID, parent, false);
        holder = new ViewHolder();
        holder.root = convertView;
        holder.textView = (TextView) convertView.findViewById(android.R.id.text1);
        holder.checkBox = (CheckBox) convertView.findViewById(android.R.id.checkbox);

        convertView.setTag(holder);
    }
    holder = (ViewHolder) convertView.getTag();

    holder.textView.setText(getItem(position).getValue());
    if(mListView.isItemChecked(position))
        holder.root.setBackgroundColor(getContext().getResources().getColor(R.color.highlight));
    else
        holder.root.setBackgroundColor(getContext().getResources().getColor(android.R.color.transparent));
    return convertView;
}

@Override
public View getHeaderView(int position, View convertView, ViewGroup parent) {
    if(!mHeadersEnabled)
        return new View(getContext());

    HeaderViewHolder holder;
    if (convertView == null) {
        holder = new HeaderViewHolder();
        convertView = LayoutInflater.from(getContext()).inflate(R.layout.list_item_header, parent, false);
        holder.labelView = (TextView) convertView.findViewById(R.id.list_item_header_label);
        convertView.setTag(holder);
    } else {
        holder = (HeaderViewHolder) convertView.getTag();
    }

    String label;
    if(mSectionNames != null){
        label = mSectionNames[getSectionForPosition(position)];
        holder.labelView.setText(label);
    }
    return convertView;
}

@Override
public long getHeaderId(int position) {
    long result = getSectionForPosition(position);
    return result;
}

@Override
public int getPositionForSection(int section) {
    return (mSectionIndexes == null || section < 0 ) ? 0 : (section == mSectionIndexes.length ? mList.size():mSectionIndexes[section]);
}

@Override
public int getSectionForPosition(int position) {
    if(mSectionIndexes != null && position >= mSectionIndexes[0]) {
        for(int i = 0; i < mSectionIndexes.length; ++i)
            if(position < mSectionIndexes[i])
                return i-1;
        return (mSectionIndexes.length - 1);
    }
    return 0;
}

@Override
public Object[] getSections() {
        return mSectionNames == null ? new Object[0] : mSectionNames; 
}
// -------------------------------------------------------------------------------
//
// Internal classes
//
// -------------------------------------------------------------------------------
private static class ViewHolder {
    public View root;
    public TextView textView;
    public CheckBox checkBox;
}

private static class HeaderViewHolder {
    public TextView labelView;
}

这是适配器代码。

4

0 回答 0