Как прикрепить пользовательское событие через привязку данных? - PullRequest
0 голосов
/ 08 февраля 2019

Примечание: также просмотрите отредактированный код внизу для дальнейшей разработки.

Как мы можем прикрепить / назначить событие спиннеру, используя привязку данных, в частностипо привязкам слушателя.Вот статья об использовании привязки данных.Итак, я пробовал код и не смог назначить событие.

на Android Studio 3.2.1

activity_parents_reg.xml


    <data>
        <import type="java.util.ArrayList" />
        <variable name="handlers"
            type="com.example.myUser.myapplication.custom.MyHandlers"
        />
        <variable
            name="cities"
            type="ArrayList&lt;String>"
        />
    <data>

    <Spinner
        android:id="@+id/dd_city"
        android:entries="@{cities}"
        android:onClick="@{() -> handlers.onClickFriend()}"
        style="@style/dropdown"
    />

MyHandlers.java


   public class MyHandlers {
        public void onClickFriend(View view) {}
   }

ParentsReg.java


    //  Data binding
        ActivityParentsRegBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_parents_reg);
        binding.setCities(ConstData.getCitiesList());
        binding.setHandlers(new MyHandlers());

Вот ошибка, полученная при компиляции:

    Found data binding errors.

    ****/ data binding error ****msg:cannot find method onClickFriend() in class 
    com.example.myUser.myapplication.custom.MyHandlers 
    file:/home/myUser/AndroidStudioProjects/MyApplication/app/src/main/
    res/layout/activity_parents_reg.xml loc:103:37 - 103:60 
    ****\ data binding error ****


Отредактировано:

Теперь, после наблюдений и экспериментов.У меня есть другая перспектива моего кода, которая обеспечивает синтаксис в порядке.

На самом деле спиннер создает проблемы.Может быть, для установки событий нужен адаптер.

Здесь, работая с Button, мы также немного изменили код:

    // Activity layout changes.
    <Button
        android:id="@+id/btn_reg_submit"
        android:text="Submit"
        android:onClick="@{(view) -> handlers.onClickFriend(view)}"
        style="@style/btn_secondary"
    />

    // MyHandlers class changes.
    public class MyHandlers {

        private Context _context;

        public MyHandlers(Context context) {
            _context = context;
        }

        public void onClickFriend(View view) {
            Toast.makeText(_context, "Button Clicked", Toast.LENGTH_SHORT).show();
        }
    }

    // Activity class changes.
    binding.setHandlers(new MyHandlers(context));

Все еще застрял с вертушкой.

Надеюсь, я получу ответ.

...