'How to restart previous activity after coming back from second activity by pressing back button especial case
I have a recyclerview adapter and card view as the layout for the element of recyclerview which I'm using them in four different activities and I manage the Intent inside the adapter class so by clicking any card inside the recyclerview in any of activity the user navigate to the second activity but I want when the user get back to the previous activity the activity restart doesn't show the changes (like expanding the card view) user did before navigating to the second activity
Here is one of my activities that show the favorite books user added before:
public class Favorite extends AppCompatActivity {
RecyclerView favoriteRec;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_favorite);
favoriteRec = findViewById(R.id.favoriteRec);
BookRecAdopter books = new BookRecAdopter(this, "favoriteBook");
books.setBooks(Utils.getInstance(this).getFavoriteBooks());
favoriteRec.setLayoutManager(new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL));
favoriteRec.setAdapter(books);
finish();
}
@Override
public void onBackPressed(){
Intent intent = new Intent(this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
overridePendingTransition(R.anim.close_in, R.anim.close_out);
}
}
This is the second activity I want to navigate the user after selecting any card in the recyclerview:
public class BookActivity extends AppCompatActivity {
public static final String BOOK_ID_KEY = "bookId";
private Button btnAddToWantToRead, btnAddToAlreadyRead, btnAddToCurrentlyRead, btnAddToFavorite;
private TextView txtBookName, txtAuthor, txtPages, txtDescription;
private ImageView imageBook;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_book);
initViews();
Intent intent = getIntent();
if (null != intent){
int bookId = intent.getIntExtra(BOOK_ID_KEY, -1);
if (bookId != -1){
Book incomingBook = Utils.getInstance(this).getBookById(bookId);
if (null != incomingBook){
addToView(incomingBook);
handleAlreadyRead(incomingBook);
handleWantToReadBook(incomingBook);
handleFavoriteBooks(incomingBook);
handleCurrentlyReadingBook(incomingBook);
}
}
}
}
@SuppressLint("SetTextI18n")
private void handleFavoriteBooks(Book incomingBook) {
ArrayList<Book> favoriteBook = Utils.getInstance(this).getFavoriteBooks();
boolean ExistInFavorite = false;
for (Book b: favoriteBook){
if (b.getId() == incomingBook.getId()) {
ExistInFavorite = true;
break;
}
}
if (ExistInFavorite){
btnAddToFavorite.setEnabled(false);
btnAddToFavorite.setText("Exist in Favorite");
}else{
btnAddToFavorite.setOnClickListener(view -> {
if (Utils.getInstance(BookActivity.this).addToFavorite(incomingBook)){
Toast.makeText(BookActivity.this, "Book added", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(BookActivity.this, Favorite.class);
startActivity(intent);
}else {
Toast.makeText(BookActivity.this, "Something went wrong ", Toast.LENGTH_SHORT).show();
}
});
}
}
@SuppressLint("SetTextI18n")
private void handleCurrentlyReadingBook(Book incomingBook) {
ArrayList<Book> currentlyReadingBooks = Utils.getInstance(this).getCurrentlyReadingBooks();
boolean ExistInCurrentlyReading = false;
for (Book b: currentlyReadingBooks){
if (b.getId() == incomingBook.getId()) {
ExistInCurrentlyReading = true;
break;
}
}
if (ExistInCurrentlyReading){
btnAddToCurrentlyRead.setEnabled(false);
btnAddToCurrentlyRead.setText("Exist in Currently reading");
}else{
btnAddToCurrentlyRead.setOnClickListener(view -> {
if(Utils.getInstance(BookActivity.this).addToCurrentlyReading(incomingBook)){
Toast.makeText(BookActivity.this, "Book added", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(BookActivity.this, CurrentlyReading.class);
startActivity(intent);
}else{
Toast.makeText(BookActivity.this, "Something went wrong", Toast.LENGTH_SHORT).show();
}
});
}
}
@SuppressLint("SetTextI18n")
private void handleWantToReadBook(Book incomingBook) {
ArrayList<Book> wantToReadBook = Utils.getInstance(this).getWantToReadBooks();
boolean ExistInWantToRead = false;
for (Book b: wantToReadBook){
if (b.getId() == incomingBook.getId()) {
ExistInWantToRead = true;
break;
}
}
if (ExistInWantToRead){
btnAddToWantToRead.setEnabled(false);
btnAddToWantToRead.setText("Exist in Wish List");
}else{
btnAddToWantToRead.setOnClickListener(view -> {
if(Utils.getInstance(BookActivity.this).addToWantToReadBook(incomingBook)){
Toast.makeText(BookActivity.this, "Book added", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(BookActivity.this, WantToReadBook.class);
startActivity(intent);
}else{
Toast.makeText(BookActivity.this, "Something went wrong", Toast.LENGTH_SHORT).show();
}
});
}
}
@SuppressLint("SetTextI18n")
private void handleAlreadyRead(Book incomingBook) {
ArrayList<Book> alreadyReadBook = Utils.getInstance(this).getAlreadyReadBooks();
boolean existInAlreadyReadBook = false;
for (Book b: alreadyReadBook){
if (b.getId() == incomingBook.getId()) {
existInAlreadyReadBook = true;
break;
}
}
if(existInAlreadyReadBook){
btnAddToAlreadyRead.setEnabled(false);
btnAddToAlreadyRead.setText("Exist in already Read");
}else{
btnAddToAlreadyRead.setOnClickListener(view -> {
if (Utils.getInstance(BookActivity.this).addToAlreadyReadBook(incomingBook)){
Toast.makeText(BookActivity.this, "Book added", Toast.LENGTH_SHORT).show();
Intent intent1 = new Intent(BookActivity.this, AlreadyReadBook.class);
startActivity(intent1);
}else{
Toast.makeText(BookActivity.this, "Something went wrong", Toast.LENGTH_SHORT).show();
}
});
}
}
private void addToView(Book book) {
txtPages.setText(String.valueOf(book.getPages()));
txtBookName.setText(book.getName());
txtAuthor.setText(book.getAuthor());
txtDescription.setText(book.getLongDesc());
Glide.with(this).asBitmap().load(book.getImageUrl()).into(imageBook);
}
private void initViews() {
btnAddToAlreadyRead = findViewById(R.id.btnAddToAlreadyRead);
btnAddToCurrentlyRead = findViewById(R.id.btnAddToCurrentlyReading);
btnAddToWantToRead = findViewById(R.id.btnAddToWantToRead);
btnAddToFavorite = findViewById(R.id.btnAddToFavorite1);
txtAuthor = findViewById(R.id.txtAuthorFull);
txtDescription = findViewById(R.id.txtDescription);
txtPages = findViewById(R.id.txtPageFull);
imageBook = findViewById(R.id.bookImage);
txtBookName = findViewById(R.id.txtBookNameFull);
}
@Override
public void finish() {
super.finish();
overridePendingTransition(R.anim.close_in, R.anim.close_out);
}
}
and here is my adapter also where I wrote the Intent method to navigate:
public class BookRecAdopter extends RecyclerView.Adapter<BookRecAdopter.ViewHolder>{
private static final String TAG = "BookRecAdopter";
private ArrayList<Book> books = new ArrayList<>();
private final Context mContext;
private final String parentActivity;
private static int CODE = 1;
public BookRecAdopter(Context mContext, String parentActivity) {
this.mContext = mContext;
this.parentActivity = parentActivity;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item_book, parent, false);
return new ViewHolder(view);
}
@SuppressLint("NotifyDataSetChanged")
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, @SuppressLint("RecyclerView") int position) {
Log.d(TAG, "onBindViewHolder: Called");
holder.txtName.setText(books.get(position).getName());
Glide.with(mContext).asBitmap().load(books.get(position).getImageUrl()).into(holder.imgBook);
holder.parent.setOnClickListener(view -> {
Intent intent = new Intent(mContext, BookActivity.class);
intent.putExtra(BOOK_ID_KEY, books.get(position).getId());
mContext.startActivity(intent);
new Handler().postDelayed(() -> {
holder.expandedRelLayout.setVisibility(View.GONE);
holder.downArrow.setVisibility(View.VISIBLE);
holder.txtName.setVisibility(View.VISIBLE);
},1000);
});
holder.txtAuthor.setText(books.get(position).getAuthor());
holder.txtDescription.setText(books.get(position).getShortDesc());
holder.bookNameFull.setText(books.get(position).getName());
if (books.get(position).isExpanded()){
TransitionManager.beginDelayedTransition(holder.parent);
holder.expandedRelLayout.setVisibility(View.VISIBLE);
holder.downArrow.setVisibility(View.GONE);
holder.txtName.setVisibility(View.GONE);
switch (parentActivity) {
case "allBook":
holder.btnDelete.setVisibility(View.GONE);
break;
case "wantToReadBook":
holder.btnDelete.setVisibility(View.VISIBLE);
holder.btnDelete.setOnClickListener(view -> {
AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
builder.setMessage("Are you sure you want to delete " + books.get(position).getName() + "?");
builder.setPositiveButton("Yes", (dialogInterface, i) -> {
if (books.remove(books.get(position))) {
Utils.getInstance(mContext).removeFromWantToRead(books);
Toast.makeText(mContext, "Book Removed", Toast.LENGTH_SHORT).show();
notifyDataSetChanged();
}
});
builder.setNegativeButton("No", (dialogInterface, i) -> {
});
builder.create().show();
});
break;
case "alreadyReadBook":
holder.btnDelete.setVisibility(View.VISIBLE);
holder.btnDelete.setOnClickListener(view -> {
AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
builder.setMessage("Are you sure you want to delete " + books.get(position).getName() + "?");
builder.setPositiveButton("Yes", (dialogInterface, i) -> {
if(books.remove(books.get(position))){
Utils.getInstance(mContext).removeFromAlreadyReadBook(books);
Toast.makeText(mContext, "Book Removed", Toast.LENGTH_SHORT).show();
notifyDataSetChanged();
}
});
builder.setNegativeButton("No", (dialogInterface, i) -> {
});
builder.create().show();
});
break;
case "favoriteBook":
holder.btnDelete.setVisibility(View.VISIBLE);
holder.btnDelete.setOnClickListener(view -> {
AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
builder.setMessage("are you sure you want to delete " + books.get(position).getName() + "?");
builder.setPositiveButton("Yes", (dialogInterface, i) -> {
if(books.remove(books.get(position))){
Utils.getInstance(mContext).removeFromFavoriteBook(books);
Toast.makeText(mContext, "Book Removed", Toast.LENGTH_SHORT).show();
notifyDataSetChanged();
}
});
builder.setNegativeButton("No", (dialogInterface, i) -> {
});
builder.create().show();
});
break;
case "currentlyReadBook":
holder.btnDelete.setVisibility(View.VISIBLE);
holder.btnDelete.setOnClickListener(view -> {
AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
builder.setMessage("Are you sure you want to delete " + books.get(position).getName() + "?");
builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
if(books.remove(books.get(position))){
Utils.getInstance(mContext).removeFromCurrentlyReadingBook(books);
Toast.makeText(mContext, "Book Removed", Toast.LENGTH_SHORT).show();
notifyDataSetChanged();
}
}
});
builder.setNegativeButton("No", (dialogInterface, i) -> {
});
builder.create().show();
});
break;
}
}
else{
TransitionManager.beginDelayedTransition(holder.parent);
holder.expandedRelLayout.setVisibility(View.GONE);
holder.downArrow.setVisibility(View.VISIBLE);
holder.txtName.setVisibility(View.VISIBLE);
}
}
@Override
public int getItemCount() {
return books.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
private final CardView parent;
private final ImageView imgBook;
private final ImageView downArrow;
private final TextView txtName, txtAuthor, txtDescription, bookNameFull, btnDelete;
private final RelativeLayout expandedRelLayout;
public ViewHolder(@NonNull View itemView) {
super(itemView);
parent = itemView.findViewById(R.id.parent);
imgBook = itemView.findViewById(R.id.imgBook);
txtName = itemView.findViewById(R.id.txtBookName);
downArrow = itemView.findViewById(R.id.btnDownArrow);
ImageView upArrow = itemView.findViewById(R.id.btnUpArrow);
expandedRelLayout = itemView.findViewById(R.id.expandedRelLayout);
txtAuthor = itemView.findViewById(R.id.txtAuthor);
txtDescription = itemView.findViewById(R.id.txtShortDec);
bookNameFull = itemView.findViewById(R.id.bookNameFull);
btnDelete = itemView.findViewById(R.id.btnDelete);
downArrow.setOnClickListener(view -> {
Book book = books.get(getAdapterPosition());
book.setExpanded(!book.isExpanded());
notifyItemChanged(getAdapterPosition());
});
upArrow.setOnClickListener(view -> {
Book book = books.get(getAdapterPosition());
book.setExpanded((!book.isExpanded()));
notifyItemChanged(getAdapterPosition());
});
}
}
@SuppressLint("NotifyDataSetChanged")
public void setBooks(ArrayList<Book> books) {
this.books = books;
notifyDataSetChanged();
}
}
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
