recherche

Maison  >  Questions et réponses  >  le corps du texte

android中子activity是否必须重写oncreate()

子activity是否必须重写oncreate(),如果不是必须的话,子activity默认调用该方法的原理是什么。

父类Activity:

public abstract class BaseActivity extends AppCompatActivity implements View.OnClickListener {
    protected Context mContext;
    private ConnectivityManager manager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);// 锁定竖屏
        mContext = getActivityContext();
        initView();
        ButterKnife.bind(this);
        initdata();
        MyApplication.getInstance().addActivity(this);
    }
    /**
     * 初始activity方法
     */
    private void initView() {
        loadViewLayout();
    }
    private void initdata(){
        findViewById();
        setListener();
        processLogic();
    }
    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();
//        StatService.onPause(mContext);
    }
    @Override
    protected void onPause() {
        // TODO Auto-generated method stub
        super.onPause();
//        StatService.onResume(mContext);
    }

    @Override
    protected void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
        MyApplication.getInstance().finishActivity(this);
    }
    /**
     * 加载页面layout
     */
    protected abstract void loadViewLayout();

    /**
     * 加载页面元素
     */
    protected abstract void findViewById();

    /**
     * 设置各种事件的监听器
     */
    protected abstract void setListener();

    /**
     * 业务逻辑处理,主要与后端交互
     */
    protected abstract void processLogic();


    /**
     * Activity.this
     */
    protected abstract Context getActivityContext();

子类 Activity:

public class WelcomeActivity extends BaseActivity {

    @Override
    protected void loadViewLayout() {
        setContentView(R.layout.activity_welcome);
    }

    @Override
    protected void findViewById() {

    }

    @Override
    protected void setListener() {

    }

    @Override
    protected void processLogic() {
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                startActivity(new Intent(WelcomeActivity.this,HomeTabActivity.class));
                finish();
            }
        }, 2000);
    }

    @Override
    protected Context getActivityContext() {
        return this;
    }

    @Override
    public void onClick(View view) {

    }
}
大家讲道理大家讲道理2772 Il y a quelques jours710

répondre à tous(2)je répondrai

  • 天蓬老师

    天蓬老师2017-04-18 09:08:34

    En orienté objet, les sous-classes hériteront des attributs comportementaux de la classe parent. Par conséquent, la sous-classe n'a pas besoin de remplacer la fonction onCreate(...).

    Avec tout le respect que je vous dois, je voudrais vous recommander deux bons livres :

    1. O'Reilly : Head First Java (version chinoise 2e édition couvrant Java5.0)

    2. Réflexions sur la programmation Java (4e édition) (Penser en Java)

    répondre
    0
  • ringa_lee

    ringa_lee2017-04-18 09:08:34

    À en juger par le code source que vous avez partagé, oncrate n'est pas abstrait dans votre classe parent, BaseActivity, donc bien sûr il n'a pas besoin d'être appelé, mais les sous-classes peuvent également le réécrire. Quant à la subActivity, elle sera appelée par. par défaut. Le principe de cette méthode est encore plus simple :
    Lorsque la machine virtuelle Java exécute un programme, la classe parent sera exécutée en premier, donc la méthode Oncreate de la classe parent sera exécutée au début, puis l'abstraite. les méthodes de la sous-classe seront exécutées dans la classe parent n'ont pas été appelées, donc lorsque la sous-classe est exécutée, ces méthodes sont exécutées !

    répondre
    0
  • Annulerrépondre