Как настроить первые 4 элемента из recyclerView на отсутствие видимости? - PullRequest
0 голосов
/ 05 октября 2018

На самом деле, у меня есть меню, из которого я могу добавить свои кнопки MainActivity в ресивере. В этом меню я показываю все добавленные кнопки, чтобы можно было удалить выбранную кнопку.

Но у меня сначала 4элементы этого recyclerView, которые должны быть по умолчанию, поэтому никто не должен к ним прикасаться, чтобы управлять им, я сделал так, что если при размахе от 0 до 3 я ничего не буду делать, но я скрою их из этого recyclerView и просто покажу добавленные элементы.

enter image description here

Как вы можете видеть на этом рисунке 1 - это моя основная деятельность с 4 элементами по умолчанию, а над ними я показываю добавленный,в то время как 2-й - это мои настройки-настройки, где я добавляю дополнительные элементы, но пока он показывает даже значение по умолчанию, которое я бы скрыл.

Ответы [ 3 ]

0 голосов
/ 05 октября 2018
before removing it save those records in another ArrayList say BackupArrayList then Remove it as below
    if (recyclerList.size() > 4) {
        for (int i = 0; i < 4; i++) {
            BackUpArrayList.add(recyclerList.get(i));
            recyclerList.remove(i);
        }
        recyclerAdapter.notifyDataSetChanged();
    }
0 голосов
/ 05 октября 2018

Одним из способов решения этой проблемы является манипулирование резервным массивом, чтобы RecyclerView просто не знал о пропущенных представлениях.Второй способ - назначить другой тип вида с нулевой высотой тем позициям, которые отсутствуют.Один тип для видимых позиций и другой для невидимых.Ниже приведен пример адаптера, который реализует эту концепцию:

RecyclerViewAdapter.java

class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    private List<String> mItems;

    RecyclerViewAdapter(List<String> items) {
        mItems = items;
    }

    @Override
    public @NonNull
    RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view;
        if (viewType == INVISIBLE_ITEM_TYPE) {
            // The type is invisible, so just create a zero-height Space widget to hold the position.
            view = new Space(parent.getContext());
            view.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 0));
        } else {
            view = LayoutInflater.from(parent.getContext()).inflate(android.R.layout.simple_list_item_1, parent, false);
        }
        return new ItemViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
        ItemViewHolder vh = (ItemViewHolder) holder;
        String itemText = mItems.get(position);

        if (vh.getItemViewType() == VISIBLE_ITEM_TYPE) {
            // Only populate if a visible type.
            vh.mItemTextView.setText(itemText);
            int bgColor = (position % 2 == 0)
                ? android.R.color.holo_blue_light
                : android.R.color.holo_green_light;
            holder.itemView.setBackgroundColor(
                holder.itemView.getContext().getResources().getColor(bgColor));
        }
    }

    @Override
    public int getItemCount() {
        return (mItems == null) ? 0 : mItems.size();
    }

    @Override
    public int getItemViewType(int position) {
        // First 4 position don't show. The visibility of a position can be separately
        // determined if only, say, the first and third position should be invisible.
        return (position < 4) ? INVISIBLE_ITEM_TYPE : VISIBLE_ITEM_TYPE;
    }

    static class ItemViewHolder extends RecyclerView.ViewHolder {
        private TextView mItemTextView;

        ItemViewHolder(View item) {
            super(item);
            mItemTextView = item.findViewById(android.R.id.text1);
        }
    }

    private final static int VISIBLE_ITEM_TYPE = 1;
    private final static int INVISIBLE_ITEM_TYPE = 2;
}

Я бы опубликовал видео, но он просто покажет RecyclerViewначиная с пункта № 4.

0 голосов
/ 05 октября 2018

Насколько я понимаю вашу формулировку проблемы, вы можете использовать приведенный ниже код внутри onBindViewHolder класса адаптера, чтобы скрыть первые 4 элемента.

Где rootView будет родительским представлением вашего переработчикапросмотреть элемент в xml.

@Override
public void onBindViewHolder(MyViewHolder holder, final int position) {

    if (position <= 3) {
        holder.rootView.setVisiblity(GONE);
    }
    else {
        holder.rootView.setVisiblity(VISIBLE);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...