我使用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);
}
});
有什么想法吗?
答案 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
类型取决于您的网格适配器。