Как прикрепить пользовательское событие через привязку данных?

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

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

на 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));



Все еще застрял со спиннером.

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


person ForWebTech    schedule 08.02.2019    source источник
comment
Я думаю, что сообщение об ошибке понятно. Что вы не понимаете в том, что не можете найти метод onClickFriend() в классе com.example.myUser.myapplication.custom.MyHandlers?   -  person m0skit0    schedule 08.02.2019
comment
@ m0skit0 Действительно, ты прав. Но в чем причина того, что он не смог найти этот метод. так же, как в официальной документации. Но до сих пор без понятия   -  person ForWebTech    schedule 08.02.2019
comment
@ForWebTech Вот объяснение способов настройки щелчка, вы должны проверить. stackoverflow.com/a/51894776/6891563, если вы все еще не можете решить, вы можете снова прокомментировать.   -  person Khemraj Sharma    schedule 12.02.2019