android studio 30天学习笔记-day 12-介绍databinding(二)

昨天介绍了databinding的基本使用,那麽当需要改变事件的值又该怎麽写呢

按钮的点击事件

不带参数

@{() -> view.onSendMsg()}

        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="click2"
            android:textSize="40sp"
            android:onClick="@{() -> view.onSendMsg()}"/>
   

带参数

可以带入position的值进去
@{() -> view.onSendMsg(dataItem.position)}

  <Button
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:text="click3"
     android:textSize="40sp"
     android:onClick="@{() -> view.onSendMsg(dataItem.position)}"/

将点击事件写在另一个class

@{handler::onSendMsg}

<Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:onClick="@{handler::onSendMsg}"
            android:text="click"
            android:textSize="40sp" />

or
@{handler.onSendMsg}

<Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:onClick="@{handler.onSendMsg}"
            android:text="click"
            android:textSize="40sp" />

ClickHandler

public class ClickHandler {
    Activity activity;
    public ClickHandler(Activity mMainActivity)
    {
        activity = mMainActivity;
    }
    public void onSendMsg(View view){
        Toast.makeText(activity,"clickHandler",Toast.LENGTH_SHORT).show();
        Log.d("123","clickHandler");
    }
}

MainActivity2

    public class MainActivity2 extends AppCompatActivity implements MainActivity2View.View{
    ActivityMain2Binding main2Binding;
    DataItem dataItem;
    int count =0;
    ClickHandler handler;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        init();

    }
    private void init() {
        main2Binding=DataBindingUtil.setContentView(this,R.layout.activity_main2);
        dataItem=new DataItem();
        dataItem.setName("eles");
        dataItem.setPasswd("213457");
        main2Binding.setDataItem(dataItem);
        main2Binding.setView(this);
        handler=new ClickHandler(MainActivity2.this);
        main2Binding.setHandler(handler);
    }

    @Override
    public void onSendMsg(int position) {

    }

    @Override
    public void onSendMsg() {

    }
}

tips:将点击事件写在ClickHandler时,如果把class name第一个英文字是小写,databinding会一直抱错。
那按钮的点击事件就到此结束


<<:  JS语法学习Day2

>>:  参与实验室的研究

Hello, World!

print("This line will be printed.") x = ...

[Day21] Scrum失败经验谈 – 没有价值的User story

User story:用一个简短的句子,描述用户的需求价值,也是大家所熟知的,身为一个「角色」,我想...

Day 08 - 今天的我没办法产好CODE

因为心情太低落了,掉着泪看教学,我真的很认真的在学,但为什麽要被批评得一无是处。 也许在学技能的同时...

Ruby on Rails Controller 是干嘛的

Controller 中⽂可翻译成「控制器」,顾名思义,就是⽤来控制流程⽤的。它可能需 要跟 Mod...

DAY19-网站构思之figma(一)

前言: 接下来就要进入网页构思的阶段了,在开始写网站之前,如同画画一样,一定都需要先打一个草稿,除...