Ich habe AppCompatSpinner für mein Fragment verwendet und ich möchte setOnItemSelectedListener()
in meinem Layout verwenden. Ich habe versucht, das Tutorial AbschnittBenutzerdefinierte XML-Attribut auf Android-Datenbindung
https://developer.android.com/topic/libraries/data-binding/index.html?hl=en#custom_setters
von hier zu verwenden, aber es bietet keine vollständige Beispiel die einfache Aktion zu tun. Und ich sehe auch für die Antwort von hier
android databinding in custom controls
und ich noch dun verstehen, wie es zu tun. würde ich ein komplettes Beispiel haben, mag die einfache benutzerdefinierte mit einigen Attributen Bindung zu tun, die nicht in XML-Attribut existiert hat, aber es ist in der UI-Steuerelement
nützlichHier ist meine xml
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:apps="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
>
<data>
<import type="android.view.View"/>
<variable
name="handler"
type="com.my.OldHandlerInterface"/>
</data>
<merge
tools:showIn="@layout/fragment_stock_replacement">
<android.support.v7.widget.CardView
android:id="@+id/exist_eqpt_card"
style="@style/sccardview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.29"
android:visibility="@{oldObj.updateOld_mode ? View.VISIBLE : View.GONE}"
>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="10dp"
android:orientation="vertical">
<android.support.v7.widget.AppCompatSpinner
android:id="@+id/spn_status"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_below="@+id/chk_installed"
apps:adapter="@{statusAdapter}"/>
</RelativeLayout>
</android.support.v7.widget.CardView>
<!--</LinearLayout>-->
</merge>
</layout>
Hier mein Fragment
public class ReplacementFragment extends QRScanFragment {
../
@BindingAdapter("app:setOnItemSelectedListener")
public static void setOnItemSelectedListener(AppCompatSpinner view, int pos) {
//do sth
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
binding = DataBindingUtil.inflate(inflater, R.layout.binding, container, false);
String[] status = new String[]{"Spare", "Lost", "Damage", "Faulty"};
statusAdapter = new StatusAdapter(getActivity(), status);
binding.setHandler(new Handler());
View view = binding.getRoot();
AppCompatSpinner lAppCompatSpinner = (AppCompatSpinner) view.findViewById(R.id.spn_status);
lAppCompatSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
}
}
}
}