0

Имеется фрагмент. В нём идёт запрос в БД и формируется HashMap. Это всё передаётся в адаптер RecyclerView для формирования заголовков списка и самих пунктов списка.

Код фрагмента:

...

public class Tab1 extends Fragment
    {
    ...
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
        {
        View rootView = inflater.inflate(R.layout.tab1, container, false);
        ...
        myData = new ArrayList<>();
        HashMap<String, String> mTab1;
        if (userCursor.moveToFirst())
            {
            do  {
                ...
                myData.add(mTab1);
                }
            while (userCursor.moveToNext());
            }

        mRecyclerView = (RecyclerView) rootView.findViewById(R.id.my_recycler_view);

        mRecyclerView.setHasFixedSize(true);

        mLayoutManager = new LinearLayoutManager(getActivity());
        mRecyclerView.setLayoutManager(mLayoutManager);

        mRecyclerView.addItemDecoration(new DividerItemDecoration(mRecyclerView.getContext(), LinearLayoutManager.VERTICAL));

        mAdapter = new RecyclerAdapterTab1(getContext(), myData);
        mRecyclerView.setAdapter(mAdapter);

        return rootView;
        }

    @Override
    public void onDestroy()
        {
        super.onDestroy();
        userCursor.close();
        db.close();
        }
    }

Код адаптера:

...

public class RecyclerAdapterTab1 extends RecyclerView.Adapter<RecyclerView.ViewHolder>
    {
    private Context mContext;
    private ArrayList<HashMap<String, String>> mDataset;
    public RecyclerAdapterTab1(Context context, ArrayList<HashMap<String, String>> dataset)
        {
        mContext = context;
        mDataset = dataset;
        }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
        {
        if (viewType == 1)
            {
            View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.tab1_item_headers, parent, false);
            MyViewHolderHeader holder = new MyViewHolderHeader(v);
            return holder;
            }
        else
            {
            View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.tab1_item_list, parent, false);
            MyViewHolderItem holder = new MyViewHolderItem(v);
            return holder;
            }
        }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position)
        {
        if (holder instanceof MyViewHolderHeader)
            {
            MyViewHolderHeader itemHeader = (MyViewHolderHeader) holder;
            ...
            }
        else
            {
            final MyViewHolderItem itemHolder = (MyViewHolderItem) holder;
            ...
            }
        }

    @Override
    public int getItemViewType(int position)
        {
        HashMap<String, String> fast_parse = mDataset.get(position);
        String cate_str = fast_parse.get("rang");
        if (cate_str.equals("1"))
            {
            return 1;
            }
         else
            {
            return 0;
            }
        }

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

    // для заголовков списка
    private class MyViewHolderHeader extends RecyclerView.ViewHolder
        {
        TextView mListDateView2;
        MyViewHolderHeader(View vH)
            {
            super(vH);
            mListDateView2 = (TextView) vH.findViewById(R.id.myListDateView2);
            }
        }

    // для пунктов списка
    private class MyViewHolderItem extends RecyclerView.ViewHolder implements View.OnClickListener
        {
        ...
        MyViewHolderItem(View v)
            {
            super(v);
            ...
            holderLayout = (LinearLayout) v.findViewById(R.id.myLinearLayout);
            holderLayout.setOnClickListener(this);
            }

        @Override
        public void onClick(View v)
            {
            int position = getAdapterPosition();
            if (position != RecyclerView.NO_POSITION)
                {
                Intent intent = new Intent(v.getContext(), ViewCollectionTab1.class);
                HashMap<String, String> fast_parse = mDataset.get(position);
                intent.putExtra("id", fast_parse.get("id"));
                v.getContext().startActivity(intent);
                }
            }
        }
    }

Когда пользователь нажимает на пункт списка, то открывается активность (что-то вроде для просмотра полной новости). В этой активности пользователь нажимает на кнопку удаления, идёт запрос в БД на удаление и активность закрывается.

Необходимо, чтобы после возврата в список тот пункт, который был удалён, плавно исчез. Прошу помочь.

P.S. Аналогичная проблема была описана здесь, но у меня почему-то не работает вызов метода обновления, который добавляется в адаптер.

Gamlet
  • 173
  • 1
    при возврате в список делайте ему mAdapter.notifyItemRemoved(position), данный метод включает анимацию – pavlofff Oct 02 '17 at 23:33
  • @pavlofff, спасибо!! Так и сделал, правда это повлекло за собой другую проблему - пункт исчезает, а в нижней части экрана добавляется дубликат последнего пункта. – Gamlet Oct 03 '17 at 10:20

0 Answers0