• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Android - startActivityForResult z innej activity

0 głosów
269 wizyt
pytanie zadane 25 października 2019 w Android, Swift, Symbian przez XezolPL Obywatel (1,530 p.)

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

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 242 wizyt
0 głosów
1 odpowiedź 414 wizyt
0 głosów
1 odpowiedź 457 wizyt
pytanie zadane 25 lutego 2017 w Android, Swift, Symbian przez mikoh81 Obywatel (1,260 p.)

93,741 zapytań

142,676 odpowiedzi

323,294 komentarzy

63,322 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...