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;
Proszę o pomoc
Cały kod wstawiam tutaj https://github.com/Xezolpl/My-Library