Sto tentando di associare un evento a una visualizzazione personalizzata con la nuova libreria di associazione dei dati Android, ma ho riscontrato un problema.Associazioni dati con listener personalizzati in visualizzazione personalizzata
Ecco la parte rilevante della mia vista personalizzata:
public class SuperCustomView extends FrameLayout {
private OnToggleListener mToggleListener;
public interface OnToggleListener {
void onToggle(boolean switchPosition);
}
public void setOnToggleListener(OnToggleListener listener) {
mToggleListener = listener;
}
.../...
}
Sto cercando di utilizzare questa visualizzazione personalizzata e legare l'evento onToggle
con il seguente:
<data>
<variable
name="controller"
type="com.xxx.BlopController"/>
</data>
<com.company.views.SuperCustomView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:onToggle="@{controller.toggleStrokeLimitation}"
app:custom_title="Blah"
app:custom_summary="Bloh"
app:custom_widget="toggle"/>
Dove toggleStrokeLimitation
è un metodo sul controller:
public void toggleStrokeLimitation(boolean switchPosition) {
maxStrokeEnabled.set(switchPosition);
}
Ho questo errore o quando si compila:
> java.lang.RuntimeException: Found data binding errors.
****/ data binding error ****msg:Cannot find the setter for attribute 'app:onToggle' with parameter type java.lang.Object. file:/path/to/androidapp/app/src/main/res/layout/fragment_stroke.xml loc:36:35 - 36:67 ****\ data binding error ****
ho provato ad usare android:onToggle
invece di app:onToggle
ma ottenere lo stesso errore.
Durante la lettura dello binding events section of the doc, mi sembra di poter collegare qualsiasi metodo dal controller all'evento onToggle
.
Il framework avvolge i metodi controller.toggleStrokeLimitation
in un SuperCustomView.OnToggleListener
? Qualche suggerimento sul tipo di magia che si cela dietro lo esistente onClick
fornito dal framework?
Prova ad implementare setter personalizzato per l'attributo onToggle http://developer.android.com/tools/data-binding/guide.html#custom_setters e assicurati che controller.toggleStrokeLimitation sia di tipo OnToggleListener –
Qual è il tipo di 'controller. toggleStrokeLimitation'?. Sembra che sia un 'Object' e il tuo setter si aspetta un' OnToggleListener' – yigit
Hai ragione, potrei farlo ma voglio mappare l'evento ad un metodo personalizzato. Come spiegato in https://developer.android.com/tools/data-binding/guide.html#binding_events, modificherò la domanda con il mio ragionamento. – fstephany