diff --git a/butterknife/src/main/java/butterknife/OnRadioGroupCheckedChanged.java b/butterknife/src/main/java/butterknife/OnRadioGroupCheckedChanged.java new file mode 100644 index 000000000..da4979a76 --- /dev/null +++ b/butterknife/src/main/java/butterknife/OnRadioGroupCheckedChanged.java @@ -0,0 +1,45 @@ +package butterknife; + +import android.view.View; +import butterknife.internal.ListenerClass; +import butterknife.internal.ListenerMethod; + +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + +import static android.widget.RadioGroup.OnCheckedChangeListener; +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.RetentionPolicy.CLASS; + +/** + * Bind a method to an {@link OnCheckedChangeListener OnCheckedChangeListener} on the view for + * each ID specified. + *
+ * {@literal @}OnCheckedChanged(R.id.example) void onChecked(boolean checked) {
+ * Toast.makeText(this, checked ? "Checked!" : "Unchecked!", LENGTH_SHORT).show();
+ * }
+ *
+ * Any number of parameters from
+ * {@link OnCheckedChangeListener#onCheckedChanged(android.widget.RadioGroup, int)
+ * onCheckedChanged} may be used on the method.
+ *
+ * @see OnCheckedChangeListener
+ */
+@Target(METHOD)
+@Retention(CLASS)
+@ListenerClass(
+ targetType = "android.widget.RadioGroup",
+ setter = "setOnCheckedChangeListener",
+ type = "android.widget.RadioGroup.OnCheckedChangeListener",
+ method = @ListenerMethod(
+ name = "onCheckedChanged",
+ parameters = {
+ "android.widget.RadioGroup",
+ "int"
+ }
+ )
+)
+public @interface OnRadioGroupCheckedChanged {
+ /** View IDs to which the method will be bound. */
+ int[] value() default { View.NO_ID };
+}
diff --git a/butterknife/src/main/java/butterknife/internal/ButterKnifeProcessor.java b/butterknife/src/main/java/butterknife/internal/ButterKnifeProcessor.java
index c8b696ff0..690e92b1c 100644
--- a/butterknife/src/main/java/butterknife/internal/ButterKnifeProcessor.java
+++ b/butterknife/src/main/java/butterknife/internal/ButterKnifeProcessor.java
@@ -12,6 +12,7 @@
import butterknife.OnItemSelected;
import butterknife.OnLongClick;
import butterknife.OnPageChange;
+import butterknife.OnRadioGroupCheckedChanged;
import butterknife.OnTextChanged;
import butterknife.OnTouch;
import butterknife.ResourceBool;
@@ -81,6 +82,7 @@ public final class ButterKnifeProcessor extends AbstractProcessor {
OnItemSelected.class, //
OnLongClick.class, //
OnPageChange.class, //
+ OnRadioGroupCheckedChanged.class, //
OnTextChanged.class, //
OnTouch.class //
);
diff --git a/butterknife/src/test/java/butterknife/internal/OnRadioGroupCheckChangedTest.java b/butterknife/src/test/java/butterknife/internal/OnRadioGroupCheckChangedTest.java
new file mode 100644
index 000000000..15da9349b
--- /dev/null
+++ b/butterknife/src/test/java/butterknife/internal/OnRadioGroupCheckChangedTest.java
@@ -0,0 +1,52 @@
+package butterknife.internal;
+
+import com.google.common.base.Joiner;
+import com.google.testing.compile.JavaFileObjects;
+import org.junit.Test;
+
+import javax.tools.JavaFileObject;
+
+import static butterknife.internal.ProcessorTestUtilities.butterknifeProcessors;
+import static com.google.common.truth.Truth.ASSERT;
+import static com.google.testing.compile.JavaSourceSubjectFactory.javaSource;
+
+public class OnRadioGroupCheckChangedTest {
+ @Test
+ public void checkedChanged() {
+ JavaFileObject source = JavaFileObjects.forSourceString("test.Test", Joiner.on('\n').join(
+ "package test;",
+ "import android.app.Activity;",
+ "import butterknife.OnRadioGroupCheckedChanged;",
+ "public class Test extends Activity {",
+ " @OnRadioGroupCheckedChanged(1) void doStuff() {}",
+ "}"
+ ));
+
+ JavaFileObject expectedSource = JavaFileObjects.forSourceString("test/Test$$ViewBinder",
+ Joiner.on('\n').join(
+ "package test;",
+ "import android.view.View;",
+ "import butterknife.ButterKnife.Finder;",
+ "import butterknife.ButterKnife.ViewBinder;",
+ "public class Test$$ViewBinder