我想知道如何保存滚动位置并恢复滚动位置,如果我来自另一个带有onbackpressed按钮的活动。我坚持这一点,并在最后几天尝试了很多方法,但一切都是徒劳的。任何帮助将不胜感激。
以下是我的Activity.class
private ImageButton mhomebtn;
private ImageButton mexplorebtn;
private ImageButton mcamerabtn;
private ImageButton mstorebtn;
private ImageButton mprofilebtn;
private RecyclerView mexplore_page;
private StaggeredGridLayoutManager mgrid;
private DatabaseReference mdatabase;
private DatabaseReference mdatabaseLike;
private DatabaseReference mdatabaseSave;
private DatabaseReference mdatabasefollow;
private DatabaseReference mdatabasefollowers;
private boolean mProcessSave = false;
private boolean mProcessLike = false;
private FirebaseAuth mAuth;
private static final int TIME_OUT = 2000;
private String mCurrent_state;
private Animation mslide_up;
private static int mPosition;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_explore);
mAuth = FirebaseAuth.getInstance();
String uid = mAuth.getCurrentUser().getUid();
mdatabase = FirebaseDatabase.getInstance().getReference().child("Explores");
mdatabaseLike = FirebaseDatabase.getInstance().getReference().child("Like");
mdatabaseSave = FirebaseDatabase.getInstance().getReference().child("Saved");
mdatabasefollow = FirebaseDatabase.getInstance().getReference().child("Following");
mdatabasefollowers = FirebaseDatabase.getInstance().getReference().child("Followers");
mdatabasefollowers.keepSynced(true);
mdatabaseLike.keepSynced(true);
mdatabaseSave.keepSynced(true);
mdatabasefollow.keepSynced(true);
mhomebtn = (ImageButton) findViewById(R.id.homebtn);
mexplorebtn = (ImageButton) findViewById(R.id.explorebtn);
mcamerabtn = (ImageButton) findViewById(R.id.camerabtn);
mstorebtn = (ImageButton) findViewById(R.id.storebtn);
mprofilebtn = (ImageButton) findViewById(R.id.profilebtn);
mslide_up = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.slide_up);
mslide_up.setAnimationListener(this);
mgrid = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);
mgrid.setReverseLayout(true);
mexplore_page = (RecyclerView) findViewById(R.id.explore_page);
mexplore_page.setHasFixedSize(true);
mexplore_page.setLayoutManager(mgrid);
mCurrent_state = "not_following";
mhomebtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(ExploreActivity.this, HomeActivity.class));
}
});
mexplorebtn.setImageResource(R.mipmap.ic_explore_blue);
mcamerabtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(ExploreActivity.this, CameraActivity.class));
}
});
mstorebtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(ExploreActivity.this, StoreActivity.class));
}
});
mprofilebtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(ExploreActivity.this, ProfileActivity.class));
}
});
}
@Override
protected void onStart() {
super.onStart();
FirebaseRecyclerAdapter <Explores, ExploreViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Explores, ExploreViewHolder>(
Explores.class,
R.layout.explore_row,
ExploreViewHolder.class,
mdatabase
) {
@Override
protected void populateViewHolder(final ExploreViewHolder viewHolder, Explores model, final int position) {
final String post_key = getRef(position).getKey();
mPosition = position;
viewHolder.setPostimage(getApplicationContext(), model.getPostimage());
viewHolder.setLikebtn(post_key);
viewHolder.setAddgallerybtn(post_key);
final String uid = mAuth.getCurrentUser().getUid();
mdatabase.child(post_key).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String right = dataSnapshot.child("right").getValue(String.class);
String center = dataSnapshot.child("center").getValue(String.class);
String left = dataSnapshot.child("lefttop").getValue(String.class);
final String category = dataSnapshot.child("category").getValue(String.class);
final String description = dataSnapshot.child("description").getValue(String.class);
final String heading = dataSnapshot.child("heading").getValue(String.class);
viewHolder.mView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(ExploreActivity.this, DetailActivity.class));
}
});
final String post_uid = dataSnapshot.child("uid").getValue(String.class);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
viewHolder.maddgallerybtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mProcessSave = true;
mdatabaseSave.child(uid).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (mProcessSave){
if (dataSnapshot.hasChild(post_key)){
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
viewHolder.mmessagetext.setVisibility(View.VISIBLE);
}
},TIME_OUT);
mProcessSave = false;
}else {
mdatabase.child(post_key).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
DatabaseReference newSaved = mdatabaseSave.child(uid).child(post_key);
newSaved.child("postimage").setValue(dataSnapshot.child("postimage").getValue());
newSaved.child("heading").setValue(dataSnapshot.child("heading").getValue()).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
}
});
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
mProcessSave = false;
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
});
mdatabaseLike.child(post_key).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
long likecounts = dataSnapshot.getChildrenCount();
mdatabase.child(post_key).child("likecounts").setValue(likecounts);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
mdatabase.child(post_key).addValueEventListener(new ValueEventListener() {
@SuppressWarnings("ConstantConditions")
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if(dataSnapshot.hasChild("likecounts")){
int count = dataSnapshot.child("likecounts").getValue(int.class);
}else {
Toast.makeText(ExploreActivity.this, "Post has been deleted successfully", Toast.LENGTH_SHORT).show();
}
String post_uid = dataSnapshot.child("uid").getValue(String.class);
viewHolder.midtext.setText(post_uid);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
viewHolder.mlikebtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mProcessLike = true;
mdatabaseLike.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (mProcessLike){
if (dataSnapshot.child(post_key).hasChild(mAuth.getCurrentUser().getUid())){
mdatabaseLike.child(post_key).child(mAuth.getCurrentUser().getUid()).removeValue();
mProcessLike = false;
} else {
mdatabaseLike.child(post_key).child(mAuth.getCurrentUser().getUid()).setValue(mAuth.getCurrentUser().getEmail());
mProcessLike = false;
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
});
}
};
mexplore_page.setAdapter(firebaseRecyclerAdapter);
}
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
}
@Override
public void onAnimationRepeat(Animation animation) {
}
public static class ExploreViewHolder extends RecyclerView.ViewHolder{
View mView;
ImageButton mlikebtn;
ImageButton maddgallerybtn;
TextView mmessagetext;
DatabaseReference mdatabaseLike;
DatabaseReference mdatabaseSave;
TextView midtext;
DatabaseReference mdatabasefollow;
DatabaseReference mdatabasefollowers;
FirebaseAuth mAuth;
TextView mrighttext;
TextView mcentertext;
TextView mlefttext;
TextView mheadinghere;
TextView mfollow;
TextView mdescription;
TextView mcategory;
TextView mlocation;
TextView mcameraused;
DatabaseReference mdatabase;
ScrollView mdetailscroll;
private static final int TIME_OUT = 100;
public ExploreViewHolder(View itemView) {
super(itemView);
mView = itemView;
mheadinghere = (TextView) mView.findViewById(R.id.headinghere);
mfollow = (TextView) mView.findViewById(R.id.follow);
mdescription = (TextView) mView.findViewById(R.id.deschere);
mcategory = (TextView) mView.findViewById(R.id.category);
mlocation = (TextView) mView.findViewById(R.id.location);
mcameraused = (TextView) mView.findViewById(R.id.cameraused);
mlikebtn = (ImageButton) mView.findViewById(R.id.likebtn);
maddgallerybtn = (ImageButton) mView.findViewById(R.id.addgallerybtn);
mmessagetext = (TextView) mView.findViewById(R.id.messagetext);
mdatabaseLike = FirebaseDatabase.getInstance().getReference().child("Like");
mdatabaseLike.keepSynced(true);
mdatabaseSave = FirebaseDatabase.getInstance().getReference().child("Saved");
mdatabaseSave.keepSynced(true);
midtext = (TextView) mView.findViewById(R.id.idtext);
mdatabasefollow = FirebaseDatabase.getInstance().getReference().child("Follow");
mdatabasefollow.keepSynced(true);
mdatabasefollowers = FirebaseDatabase.getInstance().getReference().child("Followers");
mdatabasefollowers.keepSynced(true);
mAuth = FirebaseAuth.getInstance();
mdatabase = FirebaseDatabase.getInstance().getReference().child("Explores");
mdetailscroll = (ScrollView) mView.findViewById(R.id.detailscroll);
}
public void setAddgallerybtn (final String post_key){
mdatabaseSave.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.child(mAuth.getCurrentUser().getUid()).hasChild(post_key)){
maddgallerybtn.setImageResource(R.mipmap.ic_assignment_turned_in);
}else {
maddgallerybtn.setImageResource(R.mipmap.ic_assignment_returned);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
public void setLikebtn (final String post_key){
mdatabaseLike.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.child(post_key).hasChild(mAuth.getCurrentUser().getUid())){
mlikebtn.setImageResource(R.mipmap.ic_favorite_red);
} else {
mlikebtn.setImageResource(R.mipmap.ic_favorite_border);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
public void setPostimage (final Context ctx, final String postimage){
final ImageView mpostimage = (ImageView) mView.findViewById(R.id.postimage);
Picasso.with(ctx).load(postimage).networkPolicy(NetworkPolicy.OFFLINE).into(mpostimage, new Callback() {
@Override
public void onSuccess() {
}
@Override
public void onError() {
Picasso.with(ctx).load(postimage).into(mpostimage);
}
});
}
}
}
这是Activity.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="me.selftize.snapblink.ExploreActivity">
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/explore_page"
android:layout_above="@+id/id_views">
</android.support.v7.widget.RecyclerView>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#000000"
android:id="@+id/id_views"
android:layout_above="@+id/bottomoption"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:background="#ffffff"
android:orientation="horizontal"
android:id="@+id/bottomoption">
<ImageButton
android:id="@+id/homebtn"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@android:color/transparent"
android:src="@mipmap/ic_home" />
<ImageButton
android:id="@+id/explorebtn"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@android:color/transparent"
android:src="@mipmap/ic_explore" />
<ImageButton
android:id="@+id/camerabtn"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@android:color/transparent"
android:src="@mipmap/ic_camera" />
<ImageButton
android:id="@+id/storebtn"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@android:color/transparent"
android:src="@mipmap/ic_store" />
<ImageButton
android:id="@+id/profilebtn"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@android:color/transparent"
android:src="@mipmap/ic_person" />
</LinearLayout>
</RelativeLayout>
如果您想了解除可用信息之外的任何其他信息,请与我联系并帮助我实现。
答案 0 :(得分:1)
尝试覆盖以下方法
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
if(savedInstanceState != null) {
recyclerViewState = savedInstanceState.getParcelable("statekey");
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
recyclerViewState = mexplore_page.getLayoutManager().onSaveInstanceState();//save
outState.putParcelable("statekey", recyclerViewState);
}
并且别忘了宣布
private Parcelable recyclerViewState;
然后像这样添加onResume
@Override
protected void onResume() {
super.onResume();
if (recyclerViewState != null) {
mexplore_page.getLayoutManager().onRestoreInstanceState(recyclerViewState);
}
}