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"