Android - Как расширить AppCompatActivity () в адаптере?

Виртуальный конструктор невозможен, но возможен виртуальный деструктор. Проведем эксперимент ....

#include <iostream>

using namespace std;

class Base
{
public:
    Base(){
        cout << "Base Constructor Called\n";
    }
    ~Base(){
        cout << "Base Destructor called\n";
    }
};

class Derived1: public Base
{
public:
    Derived1(){
        cout << "Derived constructor called\n";
    }
    ~Derived1(){
        cout << "Derived destructor called\n";
    }
};

int main()
{
    Base *b = new Derived1();
    delete b;
}

Вышеприведенный код выводит следующее:

Base Constructor Called
Derived constructor called
Base Destructor called

Построение производного объекта следует за правилом построения, но когда мы удаляем «b "указатель (базовый указатель) мы обнаружили, что только деструктор базы является вызовом. Но этого не должно быть. Чтобы сделать правильную вещь, мы должны сделать базовый деструктор виртуальным. Теперь посмотрим, что произойдет в следующем:

#include <iostream>

using namespace std;

class Base
{ 
public:
    Base(){
        cout << "Base Constructor Called\n";
    }
    virtual ~Base(){
        cout << "Base Destructor called\n";
    }
};

class Derived1: public Base
{
public:
    Derived1(){
        cout << "Derived constructor called\n";
    }
    ~Derived1(){
        cout << "Derived destructor called\n";
    }
};

int main()
{
    Base *b = new Derived1();
    delete b;
}

Выход изменился следующим образом:

Base Constructor Called
Derived constructor called
Derived destructor called
Base Destructor called

Итак, уничтожение базового указателя (который принимает выделение на производном объекте! ) следуют за правилом уничтожения, т. е. сначала выведенным потом базой. С другой стороны, для конструктора нет ничего похожего на виртуальный конструктор.

0
задан Pedro Relvas 6 March 2019 в 15:01
поделиться

1 ответ

Вы не можете, в Java классы не могут наследовать от двух классов одновременно. Только один. Учитывая ваш адаптер уже extends RecyclerView.Adapter, то вы не можете.

Рекомендуется использовать обратный вызов . Обратный вызов - это interface, то есть implements для активности или фрагмента хоста и передаваемый в качестве аргумента другому классу (в данном случае адаптеру). Ваш адаптер будет содержать ссылку на обратный вызов, поэтому при щелчке по представлению будет вызываться ссылка, запускающая реализацию действия или фрагмента.

Вы можете увидеть подробное объяснение здесь

  1. Когда произойдет щелчок, из действия начните намерение камеры
  2. После того, как фотография сделана внутри onActivityResult по активности передайте результат адаптеру
  3. Адаптеру нужен метод для получения результата, он должен быть примерно таким
public void addPhoto(SomeObject object){
    yourData.add(object);
    notifyDataseChanged();
}
  1. Код внутри onActivityResult должен выглядеть примерно так
SomeObject objet = data... //you have to get the data and transform it to your format
adaper.addPhoto(object)
0
ответ дан cutiko 6 March 2019 в 15:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: