美文网首页
AndroidAnnotations,不要在onCreate里面

AndroidAnnotations,不要在onCreate里面

作者: guoheng1996 | 来源:发表于2019-02-21 19:26 被阅读0次

公司新来一个android实习生,小哥哥,于是开始熟悉怎么使用公司的MVP框架,今天中午问我一个问题:

怎么我给一个button设置点击事件不好使???具体代码如下:

@EActivity(R.layout.activity_main)
public class MainActivity extends BaseAppCompatActivity {

    private EditText editText;
    private Button firstButton;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        editText = findViewById(R.id.edit_text);
        firstButton = findViewById(R.id.button);
        firstButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String s = editText.getText().toString();
                Toast.makeText(v.getContext(), "s", Toast.LENGTH_SHORT).show();
            }
        });
    }

我过去看了一会,没发现有啥问题啊???就是简单的设置了点击事件,然后弹出一个toast。

搞得我老脸一红,这么简单的我都不会啦?

于是我把@EActivity这个去掉之后好使了,或者不在onCreate里面手动findview,而是使用@viewById和@Click这两个标签来做也是好使的,都能弹出toast。。。于是我让小哥哥使用标签吧,我也不知道具体为啥这样。

实习小哥哥:刚来问个问题都不知道???

我:这个我是真的不知道~

这这这。。。。。以后还怎么混啊? 不行,我应该是最帅的那个

timg.jpg
于是我晚上自己建了个工程试试了,发现原因如下:
    @Override
    public void onCreate(Bundle savedInstanceState) {
        OnViewChangedNotifier previousNotifier = OnViewChangedNotifier.replaceNotifier(onViewChangedNotifier_);
        init_(savedInstanceState);
        super.onCreate(savedInstanceState);
        OnViewChangedNotifier.replaceNotifier(previousNotifier);
        setContentView(R.layout.activity_main);
    }
在用@EActivity标签生成的带下划线的类的onCreate方法中我发现了如上代码,在调用父类onCreate方法后,她自己又一次调用了setContentView,

我们在onCreate里面find的那些view根本不是显示在界面上的那些个view。

相关文章

网友评论

      本文标题:AndroidAnnotations,不要在onCreate里面

      本文链接:https://www.haomeiwen.com/subject/xfvdyqtx.html