ButterKnife в нескольких видах деятельности - PullRequest
0 голосов
/ 08 марта 2019

Это код, который я пытаюсь использовать с ButterKnife, но при запуске проекта я получил следующую ошибку:

ошибка: не удается найти класс символов Activity
ошибка: пакет Activity выполняетне существует
ошибка: пакет Активность не существует

BaseActivity

public abstract class BaseActivity extends AppCompatActivity {

    private Unbinder unbinder;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(getLayoutResource());
        ButterKnife.bind(this);

        setupUI();
    }


    protected abstract int getLayoutResource();

    protected abstract void setupUI();
}

MainActivity

public class MainActivity extends BaseActivity {

    @Override
    protected void setupUI() {

    }

    @Override
    protected int getLayoutResource() {
        return R.layout.activity_main;
    }
}

RegisterActivity

public class RegisterActivity extends BaseActivity {

    @BindView(R.id.editText_username)
    EditText et;

    @Override
    protected void setupUI() {


        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        getSupportActionBar().setDisplayHomeAsUpEnabled(true);


    }

    @Override
    protected int getLayoutResource() {
        return R.layout.activity_register;
    }

    @Override
    public void onBackPressed() {
        this.finish();
    }
}

В чем моя ошибка, почему я не могу связать несколько операций с абстрактным классом?

Github Project

1 Ответ

1 голос
/ 08 марта 2019

Первый , вам не нужно Unbinder для действия because Unbinder is only needed for Фрагмент`.

Второй , вам лучше использовать другой метод для переопределения, поэтомучто вам не нужно устанавливать onCreate.Примерно так:

public abstract class BaseActivity extends AppCompatActivity {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(getLayoutResource());
        ButterKnife.bind(this);

        setupUI();
    }

    protected abstract int getLayoutResource();

    protected abstract void setupUI();
}

, который затем можно использовать:

public class MainActivity extends BaseActivity {

    @Override
    protected void setupUI() {
      // setup the UI.
    }

    @Override
    protected int getLayoutResource() {
        return R.layout.activity_main;
    }
}

Вот рабочий пример использования ButterKnife с абстрактным классом:

https://github.com/isnotmenow/ButterKnifeAbstractSample

...