Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Recyclerview中,如何将初始滚动位置更改为第一项的顶部?_Java_Android_Android Recyclerview - Fatal编程技术网

Java 在Recyclerview中,如何将初始滚动位置更改为第一项的顶部?

Java 在Recyclerview中,如何将初始滚动位置更改为第一项的顶部?,java,android,android-recyclerview,Java,Android,Android Recyclerview,我将项目视图放在回收视图中。ItemView如下所示: ItemView的大小大于屏幕高度的大小 因此,我最初认为,RecyclerView将显示ItemView的上部: 但是RecyclerView显示了下面的部分: 如何将初始滚动位置更改为项目视图的顶部 代码如下: public class TimelineRecyclerViewAdapter extends RecyclerView.Adapter<TimelineRecyclerViewAdapter.ViewHolder

我将
项目视图
放在
回收视图
中。
ItemView
如下所示:

ItemView
的大小大于屏幕高度的大小

因此,我最初认为,
RecyclerView
将显示
ItemView
的上部:

但是
RecyclerView
显示了下面的部分:

如何将初始滚动位置更改为
项目视图的顶部

代码如下:

public class TimelineRecyclerViewAdapter extends RecyclerView.Adapter<TimelineRecyclerViewAdapter.ViewHolder> {
    private Post post;

    private ArrayList<Integer> timelineRecyclerViewData = null;
    private ArrayList<Integer> viewPagerData = null;
    private ArrayList<Integer> replyRecyclerViewData = null;
    private Context context;
    private ActivityMain activityMain;

    TimelineRecyclerViewAdapter(ArrayList<Integer> timelineRecyclerViewList,
                                ArrayList<Integer> viewPagerList,
                                ArrayList<Integer> replyRecyclerViewList,
                                Context context,
                                ActivityMain activityMain) {
        timelineRecyclerViewData = timelineRecyclerViewList;
        viewPagerData = viewPagerList;
        replyRecyclerViewData = replyRecyclerViewList;
        this.context = context;
        this.activityMain = activityMain;
    }

    public class ViewHolder extends RecyclerView.ViewHolder {
        ViewPager viewPager;
        RecyclerView replyRecyclerView;
        ViewHolder(View itemView) {
            super(itemView);
            viewPager = itemView.findViewById(R.id.viewPager);
            replyRecyclerView = itemView.findViewById(R.id.replyRecyclerView);
        }
    }

    @Override
    @NonNull
    public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
        View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.post, viewGroup, false);
        post = new Post(view);
        return new ViewHolder(view);
    }

    HashMap<Integer, Integer> viewPagerState = new HashMap<>();

    @Override
    public void onViewRecycled(ViewHolder viewHolder) {
        viewPagerState.put(viewHolder.getAdapterPosition(), viewHolder.viewPager.getCurrentItem());
        super.onViewRecycled(viewHolder);
    }

    @Override
    public void onBindViewHolder(ViewHolder viewHolder, int position) {
        viewHolder.setIsRecyclable(false);

        PostViewPagerAdapter postViewPagerAdapter = new PostViewPagerAdapter(viewPagerData);
        viewHolder.viewPager.setAdapter(postViewPagerAdapter);

        post.getMenu().setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {
                PopupMenu popupMenu = new PopupMenu(context, post.getMenu());
                popupMenu.inflate(R.menu.post_menu);
                popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                    @Override
                    public boolean onMenuItemClick(MenuItem item) {
                        switch(item.getItemId()) {
                            case R.id.postMenuEdit:
                                activityMain.switchActivity(ActivityEdit.class);
                            case R.id.postMenuDelete:
                                return true;
                            default:
                                return false;
                        }
                    }
                });
                popupMenu.show();
            }
        });

        post.getProfilePicture().setImageResource(R.drawable.temp_profile);
        post.getId().setText("ID" + position);
        post.getTime().setText("time" + position);
        post.getContent().setText("content" + position);

        if(viewPagerState.containsKey(viewHolder.getAdapterPosition())) {
            viewHolder.viewPager.setCurrentItem(viewPagerState.get(position));
        }

        viewHolder.replyRecyclerView.setLayoutManager(new LinearLayoutManager(context));
        viewHolder.replyRecyclerView.setAdapter(new ReplyRecyclerViewAdapter(replyRecyclerViewData));       // THIS IS THE PROBLEM
    }

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

为什么会出现这个问题?

这可能是由于以下几个原因造成的:

1) 有时,recyclerview会自动从第一个位置滚动一点

解决方案:将以下属性添加到父布局

  android:descendantFocusability="blocksDescendants"
2) 其他一切


解决方案:
mRecyclerView.layoutManager.smoothScrollToPosition(mRecyclerView,null,0)

你能分享Java/Kotlin代码来设置
RecyclerView
和你的
RecyclerView
的布局代码吗?我很快就会添加代码。酷!当你更新代码时,请在这里发表评论。我迟到了,正在试图找出问题所在。。。我更新了代码。第一个解决方案有效!谢谢你的回答。
  android:descendantFocusability="blocksDescendants"