diff --git a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/ItemClickProcessor.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/ItemClickProcessor.java
index 4968155ddc..d7759bbac9 100644
--- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/ItemClickProcessor.java
+++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/ItemClickProcessor.java
@@ -29,6 +29,7 @@
import javax.lang.model.type.TypeMirror;
import org.androidannotations.annotations.ItemClick;
+import org.androidannotations.helper.APTCodeModelHelper;
import org.androidannotations.helper.IdAnnotationHelper;
import org.androidannotations.processing.EBeansHolder.Classes;
import org.androidannotations.rclass.IRClass;
@@ -48,6 +49,7 @@
public class ItemClickProcessor implements DecoratingElementProcessor {
private IdAnnotationHelper helper;
+ private final APTCodeModelHelper codeModelHelper = new APTCodeModelHelper();
public ItemClickProcessor(ProcessingEnvironment processingEnv, IRClass rClass) {
helper = new IdAnnotationHelper(processingEnv, getTarget(), rClass);
@@ -90,8 +92,12 @@ public void process(Element element, JCodeModel codeModel, EBeanHolder holder) {
if (parameterType.getKind() == TypeKind.INT) {
itemClickCall.arg(onItemClickPositionParam);
} else {
- String parameterTypeQualifiedName = parameterType.toString();
- itemClickCall.arg(cast(holder.refClass(parameterTypeQualifiedName), invoke(onItemClickParentParam, "getAdapter").invoke("getItem").arg(onItemClickPositionParam)));
+ JClass parameterClass = codeModelHelper.typeMirrorToJClass(parameterType, holder);
+ itemClickCall.arg(cast(parameterClass, invoke(onItemClickParentParam, "getAdapter").invoke("getItem").arg(onItemClickPositionParam)));
+
+ if (parameterClass.isParameterized()) {
+ onItemClickMethod.annotate(SuppressWarnings.class).param("value", "unchecked");
+ }
}
}
diff --git a/AndroidAnnotations/functional-test-1-5-tests/src/test/java/org/androidannotations/test15/ItemClicksHandledActivityTest.java b/AndroidAnnotations/functional-test-1-5-tests/src/test/java/org/androidannotations/test15/ItemClicksHandledActivityTest.java
index 262a11fc44..ac6f689507 100644
--- a/AndroidAnnotations/functional-test-1-5-tests/src/test/java/org/androidannotations/test15/ItemClicksHandledActivityTest.java
+++ b/AndroidAnnotations/functional-test-1-5-tests/src/test/java/org/androidannotations/test15/ItemClicksHandledActivityTest.java
@@ -15,15 +15,14 @@
*/
package org.androidannotations.test15;
-import static org.fest.assertions.Assertions.assertThat;
-
+import android.view.View;
+import android.widget.ListView;
+import android.widget.Spinner;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
-import android.view.View;
-import android.widget.ListView;
-import android.widget.Spinner;
+import static org.fest.assertions.Assertions.assertThat;
@RunWith(AndroidAnnotationsTestRunner.class)
public class ItemClicksHandledActivityTest {
@@ -117,4 +116,15 @@ public void can_have_one_selected_argument() {
assertThat(activity.listViewWithOneParamItemSelected).isTrue();
}
+ @Test
+ public void handlingListViewItemClickWithParametrizedItem() {
+ ListView listView = (ListView) activity.findViewById(R.id.listViewWithArgumentWithParameterType);
+ long itemId = listView.getAdapter().getItemId(TESTED_CLICKED_INDEX);
+ View view = listView.getChildAt(TESTED_CLICKED_INDEX);
+
+ assertThat(activity.listViewParametrizedItemClicked).isFalse();
+ listView.performItemClick(view, TESTED_CLICKED_INDEX, itemId);
+ assertThat(activity.listViewParametrizedItemClicked).isTrue();
+ }
+
}
diff --git a/AndroidAnnotations/functional-test-1-5/res/layout/item_clicks_handled.xml b/AndroidAnnotations/functional-test-1-5/res/layout/item_clicks_handled.xml
index bb593c7cff..bfdadfec7a 100644
--- a/AndroidAnnotations/functional-test-1-5/res/layout/item_clicks_handled.xml
+++ b/AndroidAnnotations/functional-test-1-5/res/layout/item_clicks_handled.xml
@@ -44,6 +44,12 @@
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
+
+
adapter;
+ private ArrayAdapter> parametrizedAdapter;
boolean listViewWithOneParamItemSelected;
@AfterViews
void initView() {
- adapter = ArrayAdapter.createFromResource(this, R.array.planets_array, R.layout.simple_spinner_item);
+ adapter = ArrayAdapter.createFromResource(this, R.array.planets_array,
+ R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
+ parametrizedAdapter = new ArrayAdapter>(this, android.R.layout.simple_list_item_1, stringLists());
+
spinner.setAdapter(adapter);
listView.setAdapter(adapter);
spinnerWithArgument.setAdapter(adapter);
listViewWithArgument.setAdapter(adapter);
+ listViewWithArgumentWithParameterType.setAdapter(parametrizedAdapter);
listViewWithPosition.setAdapter(adapter);
listViewWithOneParam.setAdapter(adapter);
spinnerItemClicked = false;
@@ -92,6 +98,11 @@ public void listViewWithArgument(String selectedItem) {
listViewWithArgumentSelectedItem = selectedItem;
}
+ @ItemClick(R.id.listViewWithArgumentWithParameterType)
+ protected void listViewWithArgumentWithParameterType(ArrayList item) {
+ listViewParametrizedItemClicked = true;
+ }
+
@ItemClick
public void spinner() {
spinnerItemClicked = true;
@@ -101,26 +112,38 @@ public void spinner() {
public void spinnerWithArgument(String selectedItem) {
spinnerWithArgumentSelectedItem = selectedItem;
}
-
+
@ItemClick
void listViewWithPosition(int position) {
listViewWithPositionClickedPosition = position;
}
-
+
@ItemSelect
void listViewWithPositionItemSelected(boolean selected, int position) {
listViewWithPositionItemSelected = selected;
listViewWithPositionItemSelectedPosition = position;
}
-
+
@ItemSelect
void listViewWithOneParamItemSelected(boolean selected) {
listViewWithOneParamItemSelected = selected;
}
-
+
@ItemLongClick
void listViewWithPositionItemLongClicked(int position) {
}
+ private List> stringLists() {
+ List> stringLists = new ArrayList>();
+ for (int i = 0; i < 10; i++) {
+ ArrayList stringList = new ArrayList();
+ for (int j = 0; j < 4; j++) {
+ stringList.add(i + " : " + j);
+ }
+ stringLists.add(stringList);
+ }
+ return stringLists;
+ }
+
}