Reputation: 141
I have implemented one app where I am using RecyclerView when i click on item it go to another activity to show details of that item when i click back the recyclerView reload i wan to make the back button back to the same position in recylerView please help I search a lot but i did not find any thing my code is:
public class Optimism extends AppCompatActivity {
RecyclerView recyclerView;
FirebaseDatabase mFirebaseDatabase;
DatabaseReference mdatabaseReference;
LinearLayoutManager linearLayoutManager;
Parcelable mListState;
ArrayList<items>ar;
ImageView saveImage;
public static Optimism getOpt() {
return opt;
}
static Optimism opt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_optimism);
opt = this;
final ProgressBar progressBar = findViewById(R.id.progressBar);
Drawable d = getResources().getDrawable(R.drawable.progress);
progressBar.setProgressDrawable(d);
//back botton
if (getSupportActionBar() != null) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
}
//reycyclerView
recyclerView = findViewById(R.id.recyclerView);
recyclerView.setHasFixedSize(true);
linearLayoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, true);
linearLayoutManager.setStackFromEnd(true);
recyclerView.setLayoutManager(linearLayoutManager);
//get type
String type = getIntent().getStringExtra("Type");
//ActionBar
ActionBar actionBar = getSupportActionBar();
actionBar.setTitle(type);
actionBar.setDisplayShowHomeEnabled(true);
actionBar.setDisplayHomeAsUpEnabled(true);
//firebase
mFirebaseDatabase = FirebaseDatabase.getInstance();
mdatabaseReference = mFirebaseDatabase.getReference(type);
mdatabaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
progressBar.setVisibility(View.GONE);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
Toast.makeText(Optimism.this, databaseError.getMessage(), Toast.LENGTH_LONG).show();
}
});
mdatabaseReference.keepSynced(true);
}
@Override
protected void onStart() {
super.onStart();
final FirebaseRecyclerAdapter<items, RecycleViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<items, RecycleViewHolder>(
items.class,
R.layout.card_view_design,
RecycleViewHolder.class
, mdatabaseReference) {
@Override
protected void populateViewHolder(RecycleViewHolder viewHolder, items model, int position) {
viewHolder.setDetails(getApplicationContext(), model.getImage(), model.getTitle());
}
@Override
public RecycleViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
final RecycleViewHolder recycleViewHolder = super.onCreateViewHolder(parent, viewType);
recycleViewHolder.setOnClickListener(new RecycleViewHolder.ClickListener() {
@Override
public void onItemClick(View view, int position) {
ImageView imageView = view.findViewById(R.id.img);
TextView title = view.findViewById(R.id.title);
Drawable drawable = imageView.getDrawable();
Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();
Intent intent = new Intent(Optimism.this, PostDetails.class);
BitmapHelper.getInstance().setBitmap(bitmap);
intent.putExtra("title", title.getText().toString());
startActivity(intent);
}
});
return recycleViewHolder;
}
};
recyclerView.setAdapter(firebaseRecyclerAdapter);
}
//back botton
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) ;
finish();
return super.onOptionsItemSelected(item);
}
}
Upvotes: 0
Views: 1364
Reputation: 3034
As you can see in the Activity Lifecycle attached pic, the onStart
is being called when you re-enter your activity:
So you should move all the code from onStart
to onCreate
, which is called once in your use-case.
You have a code there that refreshes the RecyclerView
, recyclerView.setAdapter
for instance..
Reference: https://developer.android.com/guide/components/activities/activity-lifecycle
Upvotes: 0
Reputation: 119
When you are going from Activity1 to Activity2 store the selected position in a variable and when you come back from Activity2 to Activity 1 the common method will call is start()
in that method keep this code
recyclerView.getLayoutManager().scrollToPosition(position)
Upvotes: 1