0

アイテムレイアウトとカスタムアダプターをListView備えた標準のAndroidを使用していました。simle_list_item_multiple_choice一時停止時に表示され、再開時に復元されて保存されました。しかし、数日間の作業の後、アダプタ内のインターフェイスを実装し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