必须使用AndroidAnnotations将类声明为abstract或实现findViewById(int)

时间:2017-08-04 14:13:54

标签: android listview android-annotations

我正在尝试使用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>

0 个答案:

没有答案