Как изменить диапазон раздела в окне повторного использования при удалении элемента

Это ссылка, где я создаю разделы в Android Recyclelerview

Подскажите пожалуйста как управлять диапазоном разделов при удалении товара Спасибо всем:)

И это код

Простой адаптер

public class SimpleAdapter extends RecyclerView.Adapter<SimpleAdapter.SimpleViewHolder> {

private final Context mContext;
private List<String> mData;

public void add(String s,int position) {
    position = position == -1 ? getItemCount()  : position;
    mData.add(position,s);
    notifyItemInserted(position);
}

public void remove(int position){
    if (position < getItemCount()  ) {
        mData.remove(position);
        notifyItemRemoved(position);
    }
}

public static class SimpleViewHolder extends RecyclerView.ViewHolder {
    public final TextView title;

    public SimpleViewHolder(View view) {
        super(view);
        title = (TextView) view.findViewById(R.id.simple_text);
    }
}

public SimpleAdapter(Context context, String[] data) {
    mContext = context;
    if (data != null)
        mData = new ArrayList<String>(Arrays.asList(data));
    else mData = new ArrayList<String>();
}

public SimpleViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    final View view = LayoutInflater.from(mContext).inflate(R.layout.simple_item, parent, false);
    return new SimpleViewHolder(view);
}

@Override
public void onBindViewHolder(SimpleViewHolder holder, final int position) {
    holder.title.setText(mData.get(position));
    holder.title.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Toast.makeText(mContext,"Position ="+position,Toast.LENGTH_SHORT).show();
        }
    });
}

@Override
public int getItemCount() {
    return mData.size();
}

}"

SimpleSectionedRecyclerViewAdapter

public class SimpleSectionedRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

private final Context mContext;
private static final int SECTION_TYPE = 0;

private boolean mValid = true;
private int mSectionResourceId;
private int mTextResourceId;
private LayoutInflater mLayoutInflater;
private RecyclerView.Adapter mBaseAdapter;
private SparseArray<Section> mSections = new SparseArray<Section>();


public SimpleSectionedRecyclerViewAdapter(Context context, int sectionResourceId, int textResourceId,
                                          RecyclerView.Adapter baseAdapter) {

    mLayoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    mSectionResourceId = sectionResourceId;
    mTextResourceId = textResourceId;
    mBaseAdapter = baseAdapter;
    mContext = context;

    mBaseAdapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() {
        @Override
        public void onChanged() {
            mValid = mBaseAdapter.getItemCount()>0;
            notifyDataSetChanged();
        }

        @Override
        public void onItemRangeChanged(int positionStart, int itemCount) {
            mValid = mBaseAdapter.getItemCount()>0;
            notifyItemRangeChanged(positionStart, itemCount);
        }

        @Override
        public void onItemRangeInserted(int positionStart, int itemCount) {
            mValid = mBaseAdapter.getItemCount()>0;
            notifyItemRangeInserted(positionStart, itemCount);
        }

        @Override
        public void onItemRangeRemoved(int positionStart, int itemCount) {
            mValid = mBaseAdapter.getItemCount()>0;
            notifyItemRangeRemoved(positionStart, itemCount);
        }
    });
}


public static class SectionViewHolder extends RecyclerView.ViewHolder {

    public TextView title;

    public SectionViewHolder(View view,int mTextResourceid) {
        super(view);
        title = (TextView) view.findViewById(mTextResourceid);
    }
}

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int typeView) {
    if (typeView == SECTION_TYPE) {
        final View view = LayoutInflater.from(mContext).inflate(mSectionResourceId, parent, false);
        return new SectionViewHolder(view,mTextResourceId);
    }else{
        return mBaseAdapter.onCreateViewHolder(parent, typeView -1);
    }
}

@Override
public void onBindViewHolder(RecyclerView.ViewHolder sectionViewHolder, int position) {
    if (isSectionHeaderPosition(position)) {
        ((SectionViewHolder)sectionViewHolder).title.setText(mSections.get(position).title);
    }else{
        mBaseAdapter.onBindViewHolder(sectionViewHolder,sectionedPositionToPosition(position));
    }

}

@Override
public int getItemViewType(int position) {
    return isSectionHeaderPosition(position)
            ? SECTION_TYPE
            : mBaseAdapter.getItemViewType(sectionedPositionToPosition(position)) +1 ;
}


public static class Section {
    int firstPosition;
    int sectionedPosition;
    CharSequence title;

    public Section(int firstPosition, CharSequence title) {
        this.firstPosition = firstPosition;
        this.title = title;
    }

    public CharSequence getTitle() {
        return title;
    }
}


public void setSections(Section[] sections) {
    mSections.clear();

    Arrays.sort(sections, new Comparator<Section>() {
        @Override
        public int compare(Section o, Section o1) {
            return (o.firstPosition == o1.firstPosition)
                    ? 0
                    : ((o.firstPosition < o1.firstPosition) ? -1 : 1);
        }
    });

    int offset = 0; // offset positions for the headers we're adding
    for (Section section : sections) {
        section.sectionedPosition = section.firstPosition + offset;
        mSections.append(section.sectionedPosition, section);
        ++offset;
    }

    notifyDataSetChanged();
}

public int positionToSectionedPosition(int position) {
    int offset = 0;
    for (int i = 0; i < mSections.size(); i++) {
        if (mSections.valueAt(i).firstPosition > position) {
            break;
        }
        ++offset;
    }
    return position + offset;
}

public int sectionedPositionToPosition(int sectionedPosition) {
    if (isSectionHeaderPosition(sectionedPosition)) {
        return RecyclerView.NO_POSITION;
    }

    int offset = 0;
    for (int i = 0; i < mSections.size(); i++) {
        if (mSections.valueAt(i).sectionedPosition > sectionedPosition) {
            break;
        }
        --offset;
    }
    return sectionedPosition + offset;
}

public boolean isSectionHeaderPosition(int position) {
    return mSections.get(position) != null;
}


@Override
public long getItemId(int position) {
    return isSectionHeaderPosition(position)
            ? Integer.MAX_VALUE - mSections.indexOfKey(position)
            : mBaseAdapter.getItemId(sectionedPositionToPosition(position));
}

@Override
public int getItemCount() {
    return (mValid ? mBaseAdapter.getItemCount() + mSections.size() : 0);
}

}

Как я могу изменить этот код, чтобы сохранить диапазон повторного просмотра, когда элемент удален из простого адаптера

0 ответов

Другие вопросы по тегам