Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 抽象类问题_Java_Android_Abstract Class - Fatal编程技术网

Java 抽象类问题

Java 抽象类问题,java,android,abstract-class,Java,Android,Abstract Class,我正在创建一个父活动(类),然后希望将该类扩展到另一个活动(类)。我在所有的活动(类)中都有一些控件,所以我决定使用抽象类,这样我就不需要在所有的类中编写一些通用代码。我创建了下面的类,其中一个是抽象类。当我调用Welcomepage活动时,这将显示一个包含所有常用控件的屏幕(在我的例子中是单选按钮)。在抽象类中,我设置了checkedChangedListenerlistener,在onCheckedChanged()方法中,我正在创建一个toast,但它没有显示。在这种情况下,我感到困惑。不

我正在创建一个父活动(类),然后希望将该类扩展到另一个活动(类)。我在所有的活动(类)中都有一些控件,所以我决定使用抽象类,这样我就不需要在所有的类中编写一些通用代码。我创建了下面的类,其中一个是抽象类。当我调用Welcomepage活动时,这将显示一个包含所有常用控件的屏幕(在我的例子中是单选按钮)。在抽象类中,我设置了
checkedChangedListener
listener,在
onCheckedChanged()
方法中,我正在创建一个toast,但它没有显示。在这种情况下,我感到困惑。不显示toast的原因是什么

我的活动(课程)欢迎翻页\u pillReminder,它扩展了CustomTabsActivity

public class Welcomepage_pillReminder extends CustomTabsActivity

    @Override
    public void mappingWidgets() {
        super.mappingWidgets();

    }

@Override
    public void addCheckChangedListner() {
        super.addCheckChangedListner();
    }
public abstract class CustomTabsActivity extends Activity {
    protected RadioButton radHome;

    public void mappingWidgets(){
        radHome = (RadioButton)findViewById(R.id.radHome);
    }
    public void addCheckChangedListner() {
        radHome.setOnCheckedChangeListener(onCheckedChangeListener);
    }


    OnCheckedChangeListener onCheckedChangeListener = new OnCheckedChangeListener() {

        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if(isChecked) {
                if(buttonView.getText().equals("Home")) {
                    Toast.makeText(getApplicationContext(), "Home", 2000).show();
                }   
            }
        }
    };
}
客户活动

public class Welcomepage_pillReminder extends CustomTabsActivity

    @Override
    public void mappingWidgets() {
        super.mappingWidgets();

    }

@Override
    public void addCheckChangedListner() {
        super.addCheckChangedListner();
    }
public abstract class CustomTabsActivity extends Activity {
    protected RadioButton radHome;

    public void mappingWidgets(){
        radHome = (RadioButton)findViewById(R.id.radHome);
    }
    public void addCheckChangedListner() {
        radHome.setOnCheckedChangeListener(onCheckedChangeListener);
    }


    OnCheckedChangeListener onCheckedChangeListener = new OnCheckedChangeListener() {

        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if(isChecked) {
                if(buttonView.getText().equals("Home")) {
                    Toast.makeText(getApplicationContext(), "Home", 2000).show();
                }   
            }
        }
    };
}

出于您的目的,使用抽象类是有意义的

抽象类只声明其方法,而具体类可以根据其用途实现该方法。如果您计划编写扩展活动的各种类,并且它们中的每一个都有另一个用于
mappingWidgets()
addCheckChangedListner()
的实现目的,那么这是有意义的

在您的例子中,一个简单的类将被扩展,它将完成这项工作

此外,我看到您在子类中使用了
@Override
注释。使用此注释可以重写方法

首先,请删除子类方法中的
@Override
。我想那时他们会工作的


也许在使用抽象类和/或
@Override

时也要重新考虑,您可以这样做

您的CustomActivity.java

public class CustomActivity extends Activity implements OnClickListener{

    public void initLayout(Button button){
        button.setOnClickListener(this);
    }
     public void simple_method(){
            System.out.println("test in CustomActivity");
        }

    @Override
    public void onClick(View v) {
        Toast.makeText(getApplicationContext(), "Button Clicked in Custom Activity", Toast.LENGTH_LONG).show();
    }
}
  public class CustomClassDemoActivity extends CustomActivity{
    Button button;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        button = (Button) findViewById(R.id.myTextView);
        button.setText("This is a Custom Activity Example");
        super.initLayout(button);
        simple_method();
    }

    public void simple_method(){
        super.simple_method();
        System.out.println("test in mainClass");
    }
    @Override
    public void onClick(View v) {
        super.onClick(v);
        Toast.makeText(getApplicationContext(), "Button Clicked in Main Activity", Toast.LENGTH_LONG).show();
    }
}
扩展CustomActivity的活动 CustomClassDemoActivity.java

public class CustomActivity extends Activity implements OnClickListener{

    public void initLayout(Button button){
        button.setOnClickListener(this);
    }
     public void simple_method(){
            System.out.println("test in CustomActivity");
        }

    @Override
    public void onClick(View v) {
        Toast.makeText(getApplicationContext(), "Button Clicked in Custom Activity", Toast.LENGTH_LONG).show();
    }
}
  public class CustomClassDemoActivity extends CustomActivity{
    Button button;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        button = (Button) findViewById(R.id.myTextView);
        button.setText("This is a Custom Activity Example");
        super.initLayout(button);
        simple_method();
    }

    public void simple_method(){
        super.simple_method();
        System.out.println("test in mainClass");
    }
    @Override
    public void onClick(View v) {
        super.onClick(v);
        Toast.makeText(getApplicationContext(), "Button Clicked in Main Activity", Toast.LENGTH_LONG).show();
    }
}

调用这两个方法后,我忘记调用函数
mappingWidgets()
addCheckChangedListner()
。我的代码运行良好。谢谢大家的帮助

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.welcome_pillminder);
        mappingWidgets();
        addCheckChangedListner();
    }

在添加代码时,请尽量使代码尽可能小(即,不要使用对问题没有帮助的额外内容)。是的。我已经编辑了我的问题,因为您在一个抽象类中使用了内部类,这可能是原因。因为在java中,我们不能实例化抽象类,那么抽象类中的内部类将导致问题。哦,在重写
mappingWidgets()
addCheckChangedListner()
之后,我忘记调用方法。在
onCreate()
方法中。在重写mappingWidgets()和addCheckChangedListner()之后,我忘记调用该方法。在onCreate()方法中。在看到你的答案后,我已经解决了我的问题。谢谢。你是对的,你的答案对我帮助很大,但是没有必要在抽象类中传递任何小部件。我只想调用抽象类方法,就这样完成了。你的答案是对的,所以我接受了。再次感谢你的帮助。我通过了按钮实例,因为我正在尝试在自定义类中添加侦听器。感谢您的帮助。如果我只调用重写方法,我就得到了解决方案,它将起作用,这样我就不需要在所有活动中重复相同的代码。欢迎您。如果实现了从主活动类继承公共方法的子类,请确保每个子类都有自己的
onCreate
方法。还要在Android清单中将子类声明为活动类。