Wei*_*ibo 2 android butterknife
我在我的项目中使用ButterKnife,它很棒.
我可以通过ButterKnife.inject(this)在我的Activity中注入内容视图,我也在我的操作栏中使用自定义视图:
private void configActionbar() {
ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setDisplayShowTitleEnabled(false);
actionBar.setDisplayShowCustomEnabled(true);
View actionbarView = LayoutInflater.from(this)
.inflate(R.layout.actionbar_view, null);
actionBar.setCustomView(actionbarView);
}
Run Code Online (Sandbox Code Playgroud)
我想在操作栏中包含的视图上绑定onclick侦听器.传统方式如下:
Button a = (Button)actionbarView.findViewById(R.id.btn);
a.setOnClickListener(xxxx) ;
Run Code Online (Sandbox Code Playgroud)
期待的ButterKnife方式:
@OnClick(R.id.btn)
public void btnClick(){....}
Run Code Online (Sandbox Code Playgroud)
如何在我的情况下使用ButterKnife方式?
似乎你误解了核心ButterKnife力学.在一般情况下,您在注释中使用的所有ID都是您使用的类的活动/片段视图的 ID .
LayoutInflater.from(this).inflate(R.layout.actionbar_view, null)给你另一个View看起来ButterKnife无法达到的观点.
在这种情况下,ButterKnife可能为您做的最好的事情是方便的findById方法.看看这段代码:
private void configActionbar() {
...
View actionbarView = LayoutInflater.from(this)
.inflate(R.layout.actionbar_view, null);
actionBar.setCustomView(actionbarView);
// Yep, this is best ButterKnife can do for you
Button button = ButterKnife.findById(actionbarView, R.id.btn);
// And then old fashion Android code...
button.setOnClickListener(...);
}
Run Code Online (Sandbox Code Playgroud)
编辑:
哦,我有个主意.我们来试试下一个代码:
View actionbarView = LayoutInflater.from(this)
.inflate(R.layout.actionbar_view, null);
actionBar.setCustomView(actionbarView);
ButterKnife.inject(actionBar, actionbarView); // actionBar as argument is for keep track of injection. Read about memleak below.
Run Code Online (Sandbox Code Playgroud)
但请记住,在这种情况下,您可能会遇到一些冲突,因为ButterKnife会尝试两次注入每个带注释的字段/方法(对于一个活动/片段布局,然后是一个actionbarView).所以我不建议你使用这个解决方案.但是如果你喜欢它,看看ButterKnife @Optional注释,它可以让你免受ButterKnife在发生冲突时抛出的异常.
在这种情况下我不确定memleaks(方法就像注入片段一样).所以,很可能你应该ButterKnife.release(actionbarView)在适当的时候手动打电话(我不能确切地说,何时,也许在里面onDestroyView()).
在ButterKnife冲突下,我的意思是当ButterKnife找不到带注释的字段/方法的视图或者几个注入的视图包含具有重复ID的子视图时的情况
| 归档时间: |
|
| 查看次数: |
3944 次 |
| 最近记录: |