Reputation: 1370
Working with @BindingAdapter
have been working fine until now. Im getting a unusual problem that i do not see a clear path on how to fix it.
The stacktrace
@BindingAdapter on invalid element: setPieChartData(com.github.mikephil.charting.charts.PieChart,java.util.HashMap<java.lang.String,java.lang.Integer>,java.lang.String)
at com.sun.tools.javac.main.Main.compile(Main.java:553)
at com.sun.tools.javac.api.JavacTaskImpl.doCall(JavacTaskImpl.java:129)
at com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:138)
at org.gradle.api.internal.tasks.compile.JdkJavaCompiler.execute(JdkJavaCompiler.java:46)
at org.gradle.api.internal.tasks.compile.JdkJavaCompiler.execute(JdkJavaCompiler.java:33)
at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.delegateAndHandleErrors(NormalizingJavaCompiler.java:104)
at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.execute(NormalizingJavaCompiler.java:53)
at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.execute(NormalizingJavaCompiler.java:38)
at org.gradle.api.internal.tasks.compile.CleaningJavaCompilerSupport.execute(CleaningJavaCompilerSupport.java:35)
at org.gradle.api.internal.tasks.compile.CleaningJavaCompilerSupport.execute(CleaningJavaCompilerSupport.java:25)
at org.gradle.api.tasks.compile.JavaCompile.performCompilation(JavaCompile.java:206)
at org.gradle.api.tasks.compile.JavaCompile.compile(JavaCompile.java:187)
at org.gradle.api.tasks.compile.JavaCompile.compile(JavaCompile.java:130)
at com.android.build.gradle.tasks.factory.AndroidJavaCompile.compile(AndroidJavaCompile.java:49)
at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$IncrementalTaskAction.doExecute(DefaultTaskClassInfoStore.java:163)
at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$StandardTaskAction.execute(DefaultTaskClassInfoStore.java:134)
at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$StandardTaskAction.execute(DefaultTaskClassInfoStore.java:123)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:95)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:76)
My function
@BindingAdapter({"bind:alternatives","bind:topic"})
private static void setPieChartData(PieChart pieChart, HashMap<String,Integer> alternatives, String topic) {
PieChartHelper.initializePieChart(pieChart,alternatives,topic);
}
My XML Layout
<com.github.mikephil.charting.charts.PieChart
android:id="@+id/pie_chart"
android:layout_width="match_parent"
android:layout_height="300dp"
app:alternatives="@{gameFeedItem.alternatives}"
app:topic="@{gameFeedItem.topic}"/>
The weird thing is that i have done similar solutions for other views. But this is the only one that is a complete Custom view. So could it be that the PieChart class does not support databinding in this way?
The library used could be found at: https://github.com/PhilJay/MPAndroidChart
Upvotes: 4
Views: 1023
Reputation: 20926
Your BindingAdapter is on a private
method. Make it public
:
@BindingAdapter({"bind:alternatives","bind:topic"})
public static void setPieChartData(PieChart pieChart, HashMap<String,Integer> alternatives, String topic) {
PieChartHelper.initializePieChart(pieChart,alternatives,topic);
}
Upvotes: 14