NavigationComponent recyclerview使用共享元素过渡进行分段

时间:2019-11-06 12:24:32

标签: android android-architecture-navigation

我在项目中使用导航组件。

当我单击recyclerview项目时,它将打开新的片段,我想在它们之间放置过渡动画。

我尝试了一些解决方案,但是没有用。

HomeFragment.java

public class HomeFragment extends Fragment {
    ...

    private View.OnClickListener itemClickListener = view -> {
        RecyclerView.ViewHolder viewHolder = (RecyclerView.ViewHolder) view.getTag();
        int position = viewHolder.getAdapterPosition();
        if (position != RecyclerView.NO_POSITION && mList.size() > 0) {
            Restaurant thisItem = mList.get(position);
            Bundle bundle = new Bundle();
            bundle.putInt("id", thisItem.getId());
            Navigation.findNavController(view).navigate(R.id.action_home_to_restaurantFragment, bundle);
        }
    };

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        initialize();
        getData();
    }

    private void initialize() {
        if (mAdapter == null) {
            mAdapter = new MyAdapter(getActivity(), mList);
            mAdapter.setOnItemClickListener(itemClickListener);
        } else {
            mAdapter.notifyDataSetChanged();
        }
        linearLayoutManager = new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false);
        recyclerView.setLayoutManager(linearLayoutManager);
        recyclerView.setAdapter(mAdapter);
    }
}

和MyAdapter.java

public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    private final Context mContext;
    private List<Item> mList;
    private View.OnClickListener mOnItemClickListener;

    public MyAdapter(Context mContext, List<Item> mList) {
        this.mContext = mContext;
        this.mList = mList;
    }

    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
            View view = LayoutInflater.from(mContext).inflate(R.layout.item_layout, parent, false);
            return new ItemViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
       if (holder instanceof ItemViewHolder) {

            final ItemViewHolder itemVH = (ItemViewHolder) holder;
            final Item data = mList.get(position);

            itemVH.textViewName.setText(data.getName());
            Glide.with(mContext).load(data.getLogo()).into(itemVH.imageViewLogo);
        }
    }

    public void setOnItemClickListener(View.OnClickListener itemClickListener) {
        mOnItemClickListener = itemClickListener;
    }

    private class ItemViewHolder extends RecyclerView.ViewHolder {
        TextView textViewName;
        ImageView imageViewLogo;

        ItemViewHolder(View itemView) {
            super(itemView);
            itemView.setTag(this);
            itemView.setOnClickListener(mOnItemClickListener);
            textViewName = itemView.findViewById(R.id.textViewName);
            imageViewLogo = itemView.findViewById(R.id.imageViewItem);
        }

    }
}

如何使用从imageView(recyclerViewItem)到导航组件的下一个片段的共享过渡?

0 个答案:

没有答案