【问题标题】:How to override method from extend activity?如何从扩展活动覆盖方法?
【发布时间】:2019-03-02 08:38:01
【问题描述】:

我有 2 项活动。一个是AlertDialogActivity,第二个是MainActivity。我在MainActivity 中扩展AlertDialogActivity

喜欢这个public class MainActivity extends AlertDialogActivity

现在如何将AlertDialogActivity 中的方法覆盖到我的MainActivity

AlertDialogActivity:

package com.jimmytrivedi.alertdialog;

import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.widget.EditText;
import android.widget.TextView;

import androidx.appcompat.app.AppCompatActivity;

public class AlertDialogActivity extends AppCompatActivity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_alert_dialog);
        showAlertDialog(AlertDialogActivity.this);
    }

    private void showAlertDialog(final Context context) {
        // 1. Instantiate an <code><a href="/reference/android/app/AlertDialog.Builder.html">AlertDialog.Builder</a></code> with its constructor
        AlertDialog.Builder builder = new AlertDialog.Builder(AlertDialogActivity.this);

// 2. Chain together various setter methods to set the dialog characteristics
        builder.setMessage("How are you?")
                .setTitle("Hello");

// 3. Get the <code><a href="/reference/android/app/AlertDialog.html">AlertDialog</a></code> from <code><a href="/reference/android/app/AlertDialog.Builder.html#create()">create()</a></code>
        AlertDialog dialog = builder.create();
        dialog.show();


    }

}

【问题讨论】:

  • 你重写就像你重写父类的任何方法一样。这里有什么问题?
  • @SushobhNadiger 当我输入 showAlertDialog 时,它没有显示在建议中。
  • @서강원 不,不工作
  • @PoojaSingh 你应该改变方法显示的可见性...,没有私人
  • @서강원 是的,正在工作。非常感谢

标签: java android inheritance android-activity


【解决方案1】:

制作 showAlertDialog protected 而不是 private ,如果您希望其他类能够调用它,甚至可以公开。

protected void showAlertDialog(final Context context) {

}

私有方法不能被覆盖。

【讨论】:

    【解决方案2】:

    如果你想覆盖一个方法使用abstract关键字

    public abstract class AlertDialogActivity extends AppCompatActivity {
    
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_alert_dialog);
        showAlertDialog(AlertDialogActivity.this);
    }
    
      public abstract void showAlertDialog(final Context context) {
    
        // 1. Instantiate an <code><a href="/reference/android/app/AlertDialog.Builder.html">AlertDialog.Builder</a></code> with its constructor
        AlertDialog.Builder builder = new AlertDialog.Builder(AlertDialogActivity.this);
    
      // 2. Chain together various setter methods to set the dialog characteristics
        builder.setMessage("How are you?")
                .setTitle("Hello");
    
       // 3. Get the <code><a 
      href="/reference/android/app/AlertDialog.html">AlertDialog</a></code> from <code><a 
      href="/reference/android/app/AlertDialog.Builder.html#create()">create()</a></code>
        AlertDialog dialog = builder.create();
        dialog.show();
    
    
    }
    

    【讨论】:

      【解决方案3】:

      方法应该具有相同的名称和类型。 方法也应该不是私有的

      它可以是受保护的、包私有的或公共的。 您可以在这里找到更多相关信息: What is the difference between public, protected, package-private and private in Java?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-07
        相关资源
        最近更新 更多