Имеется фрагмент. В нём идёт запрос в БД и формируется 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. Аналогичная проблема была описана здесь, но у меня почему-то не работает вызов метода обновления, который добавляется в адаптер.
mAdapter.notifyItemRemoved(position), данный метод включает анимацию – pavlofff Oct 02 '17 at 23:33