AndroidAnnotations:如何在@ItemClick上访问View

时间:2015-01-09 12:53:48

标签: android android-gridview android-annotations

我使用AndroidAnnotations来构建Android应用程序。但我不知道如何重构以下内容以使用@ItemClick因为@ItemClick不接受View参数。顺便说一句,我使用View来获取所选GridView的标记。

gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
       @Override
       public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
           String url = (String) view.getTag();
           intents.put("image", url);

           DetailActivity_.launch(HomeActivity.this, view.findViewById(R.id.image), intents);
       }
 });

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

很遗憾,您无法添加View参数,但可以使用position参数。问题是没有方法可以返回点击的View,因此您必须使用一些逻辑来获取所有孩子的View

@ViewById(R.id.gridViewId)
GridView gridView;

@ItemClick(R.id.gridViewId)
void itemClicked(int position) {
    int firstPosition = gridView.getFirstVisiblePosition();
    int lastPosition = gridView.getLastVisiblePosition();

    View clickedView;

    if ((position < firstPosition) || (position > lastPosition))
        clickedView = null;

    clickedView = gridView.getChildAt(position - firstPosition);
    // do sg with clicked view
}

但实际上这并不像没有AA的代码那么干净......但是,可能支持View参数soon。在此之前,如果你真的需要使用View param,我建议坚持使用旧的方式。

答案 1 :(得分:0)

您无法使用@ItemClick注释检索视图,而是检索所选项目本身。

@ItemClick(R.id.yourgrid_id)
void itemClicked(Object item) {

//DO SOMETHING
}

item类型取决于您的网格适配器。