我有一个从Firebase数据库检索数据的简单片段。我使用firebase recycler视图显示检索数据。在滚动或屏幕旋转后,我无法强制回收器视图(或线性布局管理器)恢复滚动位置。
我在这里找到了一些答案,但它们不起作用。
我的代码是:
公共类NewsListFragment扩展了ParentNewsFragment{
static int color_naval, color_black;
private boolean mProcessLikes = false;
private DatabaseReference mDatabaseLikes;
private DatabaseReference mDatabaseViews;
private FirebaseAuth mAuth;
private int position = 0;
public static NewsListFragment getInstance() {
return new NewsListFragment();
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mDatabaseReference = FirebaseDatabase.getInstance().getReference()
.child("App_news");
mDatabaseLikes = FirebaseDatabase.getInstance().getReference().child("news_likes");
mDatabaseViews = FirebaseDatabase.getInstance().getReference().child("news_views");
mAuth = FirebaseAuth.getInstance();
mQuery = mDatabaseReference.orderByChild("pos").startAt("100");
color_naval = getResources().getColor(R.color.colorPrimary);
color_black = getResources().getColor(R.color.colorBlack);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.rv_choose, container, false);
rv = (RecyclerView) rootView.findViewById(R.id.rv_choose);
lm = new LinearLayoutManager(getActivity());
rv.setLayoutManager(lm);
rv.setHasFixedSize(true);
return rootView;
}
@Override
public void onPause() {
super.onPause();
position = lm.findFirstVisibleItemPosition();
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt("position", position);
}
@Override
public void onViewStateRestored(@Nullable Bundle savedInstanceState) {
super.onViewStateRestored(savedInstanceState);
if(savedInstanceState != null) {
position = savedInstanceState.getInt("position");
}
}
@Override
public void onResume() {
super.onResume();
if (position != 0) {
lm.scrollToPosition(position);
showToast(position+"");
}
}
@Override
public void onStart() {
super.onStart();
FirebaseRecyclerAdapter<NewsList, NewsListViewHolder> adapter =
new FirebaseRecyclerAdapter<NewsList, NewsListViewHolder>(
NewsList.class,
R.layout.frag_newslist_card_view,
NewsListViewHolder.class,
mQuery
) {
@Override
protected void populateViewHolder(NewsListViewHolder viewHolder, final NewsList model, int position) {
final String post_key = getRef(position).getKey();
viewHolder.setDate(model.getDate()+",");
viewHolder.setTime(model.getTime());
viewHolder.setTitle(model.getTitle());
viewHolder.setImage(getContext(), model.getImage());
viewHolder.setEye(model.getCode());
viewHolder.setThumb(post_key);
viewHolder.thumb.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mProcessLikes = true;
mDatabaseLikes.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (mProcessLikes){
if (dataSnapshot.child(post_key).hasChild(mAuth.getCurrentUser().getUid())){
mDatabaseLikes.child(post_key).child(mAuth.getCurrentUser().getUid())
.removeValue();
mProcessLikes = false;
}
else {
mDatabaseLikes.child(post_key).child(mAuth.getCurrentUser().getUid())
.setValue("like");
mProcessLikes = false;
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
});
viewHolder.mView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mDatabaseViews.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (!dataSnapshot.child(post_key).hasChild(mAuth.getCurrentUser().getUid())) {
mDatabaseViews.child(post_key).child(mAuth.getCurrentUser().getUid())
.setValue("view");
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
mChooserListener.chooseNews(model.getCode());
}
});
}
};
rv.setAdapter(adapter);
}
public static class NewsListViewHolder extends RecyclerView.ViewHolder {
//some text here
}
}
最后的showToast方法显示了位置的真实数量,但recyclerview从一开始就开始了。
有什么想法吗?
用类似于以下内容的内容替换线性布局管理器。我使用这个实现很多次时,使用RecycraView片段。让我知道进展如何
LinearLayoutManager mLayoutManager = new LinearLayoutManager(getActivity());
mLayoutManager.setReverseLayout(true);
mLayoutManager.setStackFromEnd(true);
yourItem.setLayoutManager(mLayoutManager);
确保没有从服务器或任何检索数据的地方重新加载数据。在片段的onCreateView或活动的onCreate中进行Add not null检查,如:
if(savedInstanceState != null){
...
}else{
loadData();
}
我制作了一个recyclerview网格,一旦用户按下按钮,它就会被api中的数据填满。旋转屏幕后,滚动位置会短暂恢复,然后再向上滚动到网格顶部。我使用本教程来保留我的滚动位置: 我还在本教程中尝试保存布局状态。 我的舱单条目是:
抱歉,我的英语很差。 我想要确切的位置。并且在活动/片段被销毁后(不管是我销毁它还是系统销毁它),我重新打开活动/片段,< code > recycle view 也可以在它被销毁的相同位置。 “相同”并不意味着“项目位置”,因为项目可能只是上次显示的一部分。 我想恢复完全相同的位置。 我尝试了下面的一些方法,但没有人是完美的。 有人可以帮忙吗? 1.First方式。 我使用< code>onSc
我在使用react路由器导航时遇到滚动问题。 当我导航到另一个组件时,它会保持上次导航时的滚动位置。然而,我希望它恢复和开始从顶部每当导航被改变。 然而,它不起作用。我有一种感觉,问题在于我的导航风格,而不是window.scrollTo()片段。
我正在为一个项目使用RichTextFX,并想在RichTextFX中的代码区背景中添加一个画布。我已经这样做了,但是我还没有找到一种方法让它在代码区本身滚动。 有没有一种方法可以通过编程获得代码区的滚动位置,这样我就可以做到这一点?
问题内容: 使用react-router时,后退按钮上的滚动位置(历史记录popstate)遇到一些问题。由于浏览器正在实现一些自动滚动行为,因此React Router v4无法开箱即用地管理滚动。这很棒,除非浏览器窗口的高度从一个视图到另一个视图变化太大。我已经实现了ScrollToTop组件,如下所述:https : //reacttraining.com/react- router/web
我有一个包含多个< code>LazyRow的< code>LazyColumn。在旧术语中,嵌套RecyclerView。 我的问题是,当移动到一个新的可组合(不同的选项卡)时,不会恢复滚动状态。但是内部s恢复它们的状态。 例如,打开主屏幕,滚动到底部,然后滚动结束,然后打开不同的选项卡并再次返回主选项卡。 的产品进行评级 如何恢复滚动状态?