Абстрактная проблема класса - PullRequest
0 голосов
/ 14 октября 2011

Я создаю одну родительскую активность (класс), а затем хочу расширить этот класс на другую активность (класс).У меня есть некоторые элементы управления во всех видах деятельности (классы), поэтому я решил использовать класс Abstract, чтобы мне не нужно было писать какой-то общий код во всех классах. Я создал классы ниже, и один из них - абстрактный класс.В этом упражнении мне будет показан экран со всеми общими элементами управления (в моем случае радио-кнопки). В классе Abstract я установил checkedChangedListener listener, а в методе onCheckedChanged() я создаю тост, но он не отображается.в этом случае. По какой причине не отображается тост?

Моя активность (класс)*

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 ]

2 голосов
/ 14 октября 2011

Вы можете сделать это следующим образом:

Ваша 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();
    }
}
0 голосов
/ 14 октября 2011

Я забыл вызвать функции mappingWidgets() и addCheckChangedListner() после вызова этих двух методов мой код работает нормально. Спасибо за помощь.

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.welcome_pillminder);
        mappingWidgets();
        addCheckChangedListner();
    }
0 голосов
/ 14 октября 2011

Для вашей цели использование абстрактного класса не имеет смысла.

Абстрактный класс объявляет только свои методы, и конкретный класс может затем реализовать метод в зависимости от его назначения.Было бы целесообразно, если вы планируете писать различные классы, расширяющие вашу деятельность, и у каждого из них будет другая цель реализации mappingWidgets() и addCheckChangedListner().

В вашем случае простой класс, который будет расширен, будетделать работу.

Кроме того, я вижу, что вы используете аннотацию @Override в своем подклассе.С помощью этой аннотации вы переопределяете ваши методы.

Сначала удалите @Override из ваших методов подкласса.Я думаю, что они будут работать тогда.

Может быть, также пересмотреть, когда используются абстрактные классы и / или @Override.

...