抽象类问题

时间:2011-10-14 07:01:25

标签: java android abstract-class

我正在创建一个父Activity(Class),然后想要将此类扩展到另一个Activity(Class)。我在所有活动(类)中都有一些控件,所以我决定使用Abstract类,这样我就不需要在所有类中编写一些公共代码。我在类下面创建了一个类,其中一个是抽象类。当我调用我的欢迎页面时活动这将显示一个包含所有常用控件的屏幕(在我的情况下为单选按钮)。在抽象类中我设置了checkedChangedListener侦听器,在onCheckedChanged()方法中我创建了一个toast但它没有显示。在这种情况下我感到很困惑。不显示吐司的原因是什么?。

我的活动(类)Welcomepage_pillReminder扩展了CustomTabsActivity

public class Welcomepage_pillReminder extends CustomTabsActivity

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

    }

@Override
    public void addCheckChangedListner() {
        super.addCheckChangedListner();
    }

CustomActivity

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();
                }   
            }
        }
    };
}

3 个答案:

答案 0 :(得分:2)

你可以这样做,

您的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();
    }
}

扩展CustomActivity的活动 的 CustomClassDemoActivity.java

  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();
    }
}

答案 1 :(得分:0)

为了您的目的,使用抽象类剂量是有意义的。

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

在你的情况下,一个将被扩展的简单类将完成这项工作。

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

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

在使用抽象类和/或@Override时,也许还会重新考虑。

答案 2 :(得分:0)

我忘了在调用这两个方法后调用函数mappingWidgets()addCheckChangedListner()我的代码工作正常。谢谢大家的帮助。

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