我正在尝试使用AndroidAnnotations实现ListView活动并重写ItemClick方法。构建不断失败,在AA类ValueItemView_生成中显示以下错误:“类值ValueItemView_必须在HasViews中声明为abstract或实现findViewById(int)方法。”我在StackOverflow中也发现了许多类似的Q / As,但是更多它们与配置为使用AndroidAnnotations的项目无关。到目前为止,我尝试过的所有东西都没有成功完成。
我已经尝试在ValuesActivity中实现findViewById(int)方法,但它告诉我该方法被声明为final,所以我不允许在那里实现它。
我的代码如下:
ValueItemView:
@EBean
public class ValuesAdapter extends BaseAdapter {
List<Value> values;
@RootContext
Context context;
@AfterInject
void initAdapter() {
values = new ArrayList<Value>();
this.values.add( new Value("Value1", "Class1"));
this.values.add(new Value("Value2", "Class2"));
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ValueItemView valueItemView;
if (convertView == null) {
valueItemView = ValueItemView_.build(context);
} else {
valueItemView = (ValueItemView) convertView;
}
valueItemView.bind(getItem(position));
return valueItemView;
}
@Override
public int getCount() {
return values.size();
}
@Override
public Value getItem(int position) {
return values.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
}
ValuesAdapter:
@EViewGroup(R.layout.activity_value_item)
`enter code here`public class ValueItemView extends LinearLayout {
@ViewById
TextView tv_valueName;
@ViewById
TextView tv_valueClass;
public ValueItemView(Context context) {
super(context);
}
public void bind(Value value) {
tv_valueName.setText(value.getName());
tv_valueClass.setText(value.getValueClass());
}
}
ValuesActivity:
@EActivity(R.layout.activity_values)
public class ValuesActivity extends AppCompatActivity {
@ViewById
ListView values_lvValues;
@Bean
ValuesAdapter adapter;
@AfterViews
void bindAdapter() {
values_lvValues.setAdapter(adapter);
}
@ItemClick
void values_lvValuesItemClicked(Value value) {
makeText(this, value.getName() + " " + value.getValueClass(), LENGTH_SHORT).show();
}
}
activity_values.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:background="#FFEEEE">
<ListView android:id="@+id/values_lvValues"
android:layout_width="fill_parent"
android:layout_height="0dip"
android:focusableInTouchMode="false"
android:listSelector="@android:color/transparent"
android:layout_weight="2"
android:headerDividersEnabled="false"
android:footerDividersEnabled="false"
android:dividerHeight="5dp"
android:divider="#770000"
android:cacheColorHint="#000000"
android:drawSelectorOnTop="false">
</ListView>
</LinearLayout>