首页 > 解决方案 > 如何回到相同的recyclerview项目位置

问题描述

我正在使用从 firebase 数据库加载项目的 recyclerview。单击该项目时,将打开一个新活动并显示数据。但是当我返回 recyclerview 活动时,它会从顶部打开,而不是从我离开的位置打开。如何实现从左侧位置打开活动。

onBindViewHolder 是这样的:

    @Override
    protected void onBindViewHolder(@NonNull myViewHolder holder, int position, @NonNull MainModel model) {
        holder.headi.setText(model.getHeading());
        holder.arti.setText(model.getArticle());
        holder.date.setText(model.getPublishedDate());
        holder.user.setText(model.getUsername());

        Glide.with(holder.img.getContext())
                .load(model.getImageUrl())
                .placeholder(R.mipmap.ic_launcher)
                .error(R.mipmap.ic_launcher)
                .into(holder.img);
        holder.relativeLayout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent= new Intent(context, Read.class);
                intent.putExtra("Heading",model.getHeading());
                intent.putExtra("Article",model.getArticle());
                intent.putExtra("ImageUrl",model.getImageUrl());
                intent.putExtra("PublishedDate", model.getPublishedDate());
                intent.putExtra("PublishedBy", model.getUsername());
                context.startActivity(intent);
                ((Activity)context).finish();
            }
        });

    }

Read 活动中的后退按钮如下所示:

public void back(View view)
 {
     if (fAuth.getCurrentUser()!=null)
 {
     i= new Intent(Read.this,Scroll2.class);
 }
 else{
     i= new Intent(Read.this,Scroll.class);
 }
     startActivity(i);
     finish();
 }

标签: androidandroid-recyclerview

解决方案


首先将可见的顶部项目位置存储在onPause()您的活动中

 int lastPosition =  ((LinearLayoutManager) recyclerView.getLayoutManager()).findFirstCompletelyVisibleItemPosition();

使用保存,使用savedInstanceState恢复onResume()

((LinearLayoutManager) recyclerView.getLayoutManager()).scrollToPositionWithOffset(lastPosition,0);

推荐阅读