无法让@ViewById在@EBean中工作。
@EActivity(R.layout.data_layout)
public class MyActivity extends Activity {
@Bean
MyEbean bean;
@AfterViews
public void setupView() {
bean.loadData("Test name");
}
}
@EBean
public class MyEbean {
@RootContext
context;
@ViewById(R.id.name_field)
TextView nameField;
public void loadData(String name) {
nameField.setText(name);
}
}
"名称字段" in loadData()为null。同时如果我在loadData()
中执行此操作 nameField = (TextView)((Activity) context).findViewById(R.id.name_field);
一切都很好。所以这个观点肯定存在。此外,如果我通过改装回调(即延迟之后)调用此方法" name"是自动填充的。我在那里做错了什么?
我正在使用Android Annotations 3.0.1。
答案 0 :(得分:2)
@Leo这里是自定义视图和绑定数据的实现。我想制作像芯片一样的小部件
http://www.google.com/design/spec/components/chips-tokens.html
首先在xml中定义布局
<?xml version="1.0" encoding="utf-8"?>
<ImageView
android:id="@+id/ivIcon"
android:layout_width="@dimen/chip_size"
android:layout_height="@dimen/chip_size"
android:src="@drawable/default_icon" />
<TextView
android:id="@+id/tvName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="8dp"
android:layout_toRightOf="@+id/ivIcon"
android:fontFamily="sans-serif"
android:lines="1"
android:singleLine="true"
android:textColor="@color/secondary_text"
android:textSize="14sp" />
创建一个类并使用@eviewgroup注释它 ChipView.java
@EViewGroup(R.layout.layout_chip)
public class ChipView extends RelativeLayout{
@App
App app;
public ChipView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public ChipView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public ChipView(Context context) {
super(context);
}
@ViewById(R.id.layoutChipContainer)
View container;
@ViewById(R.id.ivIcon)
ImageView ivIcon;
@ViewById(R.id.tvName)
TextView tvName;
public void bind(User user){
tvName.setText(user.getUsername());
app.imageLoader.displayImage(user.getPicture(), ivIcon, app.myResources.iconOptions);
}
}
然后在您的活动中
ChipView v = ChipView_.build(context);
v.bind(user);
其中context是某种上下文,user是POJO
非常容易。
答案 1 :(得分:1)
@EBean
带注释的类不应该执行任何与视图相关的工作,因为它们可以在每个增强的类中注入(即使用@EService
注释,@EBean
,{{1} },...)。
如果您能够在通过@EActivity
检索的上下文中执行findViewById
,那只是因为 - 在这种情况下 - 给予bean的上下文是活动。但是根据bean的注入位置,它也可以是ApplicationContext或链接到另一个acivity / layout的Context。