如何以简单的方式初始化许多Android组件

时间:2017-10-06 16:27:27

标签: android

当我厌倦了通过创建对象来初始化所有组件时是否有任何问题? 按下按钮后没有任何反应。

我的自定义课程:

public class ViewHandler extends AppCompatActivity {
    public Button btndo;
    public TextView text1;
    public EditText et1;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout);

        btndo = (Button) findViewById(R.id.button1);
        btndo.setOnClickListener(btndolistener);
        text1 = (TextView) findViewById(R.id.textView1);
        et1 = (EditText) findViewById(R.id.editText1);
    }

    private Button.OnClickListener btndolistener = new Button.OnClickListener() {
        @Override
        public void onClick(View v) {
            text1.setText("test");
        }
    };

我的主要活动:

public class MainActivity extends AppCompatActivity {
    protected ViewHandler viewtodo = new ViewHandler();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        viewtodo.onCreate(savedInstanceState);
    }

2 个答案:

答案 0 :(得分:0)

您无法使用Activity实例化new课程,例如您尝试使用viewhandler。只有Android框架才能实例化一个Activity。

此外,带有子Activity的Activity实际上没有意义 - Activity就像桌面计算机上的窗口。 Windows不包含其他窗口。您的MainActivity根本不知道如何处理viewhandler活动。

在这种特殊情况下,您应该将所有代码从viewhandler类移到MainActivity。如果您想将该逻辑移到单独的类中,则viewhandler不应该是活动。

答案 1 :(得分:0)

不要在没有任何特殊需求的情况下扩展Activity类。使用POJO代替它并使用组合而不是继承。它更干净的方式

     public class ViewHandler {
        private Activity activity;

        public Button btndo;
        public TextView text1;
        public EditText et1;

        ViewHandler(Activity activity) {
            this.activity = activity;
        }

        private View findViewById(int id) {
            return activity.findViewById(id);
        }

        private Button.OnClickListener btndolistener = new Button.OnClickListener() {
            @Override
            public void onClick(View v) {
                text1.setText("test");
            }
        };

        public void onCreate(Bundle savedInstanceState) {
            activity.setContentView(R.layout.layout);

            btndo = (Button) findViewById(R.id.button1);
            btndo.setOnClickListener(btndolistener);
            text1 = (TextView) findViewById(R.id.textView1);
            et1 = (EditText) findViewById(R.id.editText1);
        }
    }