2023年7月7日发(作者:)
androidmvvm点击事件,AndroidMVVM设计模式(事件处理)正⽂上⼀章我们讲到了ViewModel和DataBinding的基本⽤法和结合在⼀起改如何⽤,今天我们来看看⽤这两者如何处理事件(⽐如单机事件,长按事件等)我们之前在写代码的时候会把UI和⼀些事件逻辑全部写在Activity或者Fragment中,这在MVVM设计模式是不⾏的,所以我们要改变思想,将UI和逻辑数据分离事件处理我们可以把控件的事件处理写在Activity中,也可以写在ViewModel或其他类中,不过如果没有设计UI操作的话,还是尽可能写在ViewModel中,所以,事件处理有两种写法在xml布局中使⽤OnClickListener变量,然后在Activity或Fragment中调⽤在xml中定义控件id,然后直接在Activity或Fragment中使⽤Databinding调⽤在ViewModel或者其他类中定义相关⽅法,然后布局中引⼊并调⽤下⾯我们来看具体怎么做第⼀种(在xml布局中使⽤OnClickListener变量,然后在Activity或Fragment中调⽤)我们先在布局中定义variablexmlns:android="/apk/res/android">name="onClickListener"type="kListener"/>name="viewModel"type="ewModel"/>android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical">android:layout_width="match_parent"android:layout_height="match_parent"android:text="@{}" />android:layout_width="match_parent"android:layout_height="wrap_content"android:onClick="@{onClickListener}"/>然后我们在Activity中实现OnClickListener接⼝,然后重写onClick⽅法package ;import ;import ;import tyMainBinding;import patActivity;import ndingUtil;import delProviders;public class MainActivity extends AppCompatActivity implements kListener {ActivityMainBinding mBinding;MainViewModel mViewModel;@Overrideprotected void onCreate(Bundle savedInstanceState) {te(savedInstanceState);mBinding = tentView(this,ty_main);mViewModel= (this).get();wModel(mViewModel);ecycleOwner(this);t("Hello World");}@Overridepublic void onClick(View view) {}}我们就可以在onClick⽅法中处理事件了第⼆种(在xml中定义控件id,然后直接在Activity或Fragment中使⽤Databinding调⽤)我们可以直接给button定义⼀个idandroid:id="@+id/main_btn"android:layout_width="match_parent"android:layout_height="wrap_content"android:onClick="@{onClickListener}"/>然后直接在Activity中调⽤lickListener(new kListener() {@Overridepublic void onClick(View view) {}});第三种(在ViewModel或者其他类中定义相关⽅法,然后布局中引⼊并调⽤)我们在ViewModel中定义⽅法package ;import eLiveData;import del;public class MainViewModel extends ViewModel {public MutableLiveData test=new MutableLiveData<>();public void onClick(){}}然后改变下Button的onClickandroid:id="@+id/main_btn"android:layout_width="match_parent"android:layout_height="wrap_content"android:onClick="@{viewModel::onClick}"/>好了,今天的内容就到这⾥
发布者:admin,转转请注明出处:http://www.yc00.com/news/1688677466a161772.html
评论列表(0条)