Witam, mam problem nad którym głowię się już kilka dni.
Mam klasę
AllBooksActivity w której wyświetlane są wszystkie książki, w BooksRecViewAdapter będącym adapterem do RecyclerView znajdującym się w tym AllBooksActivity mam OnClicka dla pojedynczego itemu RecyclerView'a.
//BooksRecViewAdapter
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, final int position) {
Log.d(TAG, "onBindViewHolder: called");
holder.setData(books.get(position).getTitle(), books.get(position).getImageUrl());
holder.relLay.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(context, OpenedBookActivity.class);
intent.putExtra("book",books.get(position));
((Activity)context).startActivityForResult(intent, BooksTabFragment.UPDATE_BOOK_ACTIVITY_REQUEST_CODE);
}
});
}
gdzie context dostaje od AllBooksActivity właściwie to przez TabFragment z ViewPagera
public BooksRecViewAdapter(Context context) {
this.context = context;
this.inflater = LayoutInflater.from(context);
}
czyli gdy wywołuję tam startActivityForResult() to onActivityResult() jest z AllBooksActivity.
I tak w AllBooksActivity mam też fab z onClickiem który otwiera activity dla tworzenia nowej książki
//AllBooksActivity
private void setOnClickListeners() {
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mStartActivityForResult(BooksTabFragment.NEW_BOOK_ACTIVITY_REQUEST_CODE,null);
}
});
}
public void mStartActivityForResult(int requestCode, Serializable extraSerializable){
Intent intent = new Intent(context,AddBookActivity.class);
if(requestCode == BooksTabFragment.NEW_BOOK_ACTIVITY_REQUEST_CODE){
((Activity)AllBooksActivity.this).startActivityForResult(intent,BooksTabFragment.NEW_BOOK_ACTIVITY_REQUEST_CODE);
}
else if(requestCode == BooksTabFragment.UPDATE_BOOK_ACTIVITY_REQUEST_CODE && !extraSerializable.equals(null)){
intent.putExtra("thisBook",extraSerializable);
((Activity)AllBooksActivity.this).startActivityForResult(intent,BooksTabFragment.UPDATE_BOOK_ACTIVITY_REQUEST_CODE);
}
}
i chcę tą metodę również wykorzystać w innej Activity OpenedBookActivity jako przycisk do edycji ale nie mogę dostać instancji klasy AllBooksActivity i teraz właśnie nie mam pojęcia jak to obejść?
//OpenedBookActivity
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater menuInflater = getMenuInflater();
menuInflater.inflate(R.menu.opened_book_menu, menu);
MenuItem editItem = menu.findItem(R.id.action_edit);
editItem.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem menuItem) {
//I TOTALLY DONT KNOW WHAT CAN I DO
// allBooksActivity.startActivityForResult(BooksTabFragment.UPDATE_BOOK_ACTIVITY_REQUEST_CODE, thisBook);
return false;
}
});
MenuItem delItem = menu.findItem(R.id.action_delete);
delItem.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem menuItem) {
//AlertDialog.Builder builder;
return false;
}
});
return true;
onActivityResult() wygląda u mnie tak
@Override
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
BookViewModel model = ((BooksTabFragment)sectionsPagerAdapter.getItem(books_viewPager.getCurrentItem())).getBookViewModel();
if (requestCode == BooksTabFragment.NEW_BOOK_ACTIVITY_REQUEST_CODE && resultCode == Activity.RESULT_OK) {
Book newBook = (Book) data.getSerializableExtra("newBook");
model.insert(newBook);
}
else if (requestCode == BooksTabFragment.UPDATE_BOOK_ACTIVITY_REQUEST_CODE && resultCode == Activity.RESULT_OK){
Book resultBook = (Book) data.getSerializableExtra("resultBook");
model.update(resultBook);
}
else {
}
}
Proszę o pomoc
Cały kod wstawiam tutaj https://github.com/Xezolpl/My-Library