当前位置: 首页 > news >正文

营销型网站建设怎么做微信公众号的小程序怎么开发

营销型网站建设怎么做,微信公众号的小程序怎么开发,捷信做单官方网站,dw做了网站还可以做淘宝详情吗1.LiveData初识 LiveData:ViewModel管理要展示的数据(VM层类似于原MVP中的P层),处理业务逻辑,比如调用服务器的登陆接口业务。通过LiveData观察者模式,只要数据的值发生了改变,就会自动通知VIEW层&#xf…

1.LiveData初识

LiveData:ViewModel管理要展示的数据(VM层类似于原MVP中的P层),处理业务逻辑,比如调用服务器的登陆接口业务。通过LiveData观察者模式,只要数据的值发生了改变,就会自动通知VIEW层,View层会设置观察者来监听数据的改变。

MVP:P调用M层去获取数据,P回调View层实现的接口,把数据以函数参数的形式传递过去。

2.示例工程

        build.gradle要修改下,增加如下配置以开启Databinding:

    dataBinding{enabled = true;}

 2.1View层

        布局界面,Alt+Enter可以转成Databinding可以识别的布局。这时识别前的布局。

 activity_main.xml。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/main"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"android:gravity="center_horizontal"android:orientation="vertical"><EditTextandroid:layout_marginTop="100dp"android:id="@+id/edtUserName"android:layout_width="200dp"android:layout_height="wrap_content"android:hint="请输入用户名!" /><EditTextandroid:id="@+id/edtPassword"android:layout_width="200dp"android:layout_height="wrap_content"android:hint="请输入密码!" /><Buttonandroid:id="@+id/btLogin"android:layout_width="200dp"android:layout_height="wrap_content"android:text="登陆"/></LinearLayout>

        转换后的布局:

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"><data></data><LinearLayoutandroid:id="@+id/main"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"android:gravity="center_horizontal"android:orientation="vertical"><EditTextandroid:layout_marginTop="100dp"android:id="@+id/edtUserName"android:layout_width="200dp"android:layout_height="wrap_content"android:hint="请输入用户名!" /><EditTextandroid:id="@+id/edtPassword"android:layout_width="200dp"android:layout_height="wrap_content"android:hint="请输入密码!" /><Buttonandroid:id="@+id/btLogin"android:layout_width="200dp"android:layout_height="wrap_content"android:text="登陆" /></LinearLayout>
</layout>

         MainActivity.java

package com.gaoting.livedatatest.ui;import android.os.Bundle;
import android.view.View;
import android.widget.Toast;import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import androidx.databinding.DataBindingUtil;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider;import com.gaoting.livedatatest.R;
import com.gaoting.livedatatest.databinding.ActivityMainBinding;
import com.gaoting.livedatatest.viewmodel.LoginViewModel;/**** View层*/
public class MainActivity extends AppCompatActivity {ActivityMainBinding activityMainBinding;LoginViewModel loginViewModel;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);activityMainBinding = DataBindingUtil.setContentView(this,R.layout.activity_main);loginViewModel = new ViewModelProvider(MainActivity.this).get(LoginViewModel.class);initView();initListener();initLiveDataObserver();}private void initLiveDataObserver() {loginViewModel.getStrToken().observe(this, new Observer<String>() {@Overridepublic void onChanged(String newToken) {Toast.makeText(MainActivity.this,"TOKEN="+newToken,Toast.LENGTH_SHORT).show();}});}private void initListener() {activityMainBinding.btLogin.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {String username = activityMainBinding.edtUserName.getText().toString();String password = activityMainBinding.edtPassword.getText().toString();loginViewModel.login(username,password);}});}private void initView() {activityMainBinding.edtUserName.setText("test");activityMainBinding.edtPassword.setText("12345678");}
}

2.2ViewModel层:

package com.gaoting.livedatatest.viewmodel;import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;import com.gaoting.livedatatest.model.HttpDataSource;/**** VM层:* 1.viewModel用来管理view层(Activity要展示的数据):* 2.处理业务逻辑,比如对数据进行加工处理,获取HTTP接口数据。*/
public class LoginViewModel extends ViewModel {//livedata token stringMutableLiveData<String> strToken = new MutableLiveData<>();public MutableLiveData<String> getStrToken() {return strToken;}//loginpublic void login(String username, String password) {//可能会对密码进行加密等业务逻辑,这里我们忽略。HttpDataSource  httpDataSource  = new HttpDataSource();String token = httpDataSource.login(username,password);strToken.postValue(token);}
}

2.3Model层:

package com.gaoting.livedatatest.model;/**** 获取网络数据M层*/
public class HttpDataSource {//模拟请求网络服务器的登陆业务接口public String login(String username, String password) {String token;try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}token = "123token";return token;}
}

http://www.yayakq.cn/news/712343/

相关文章:

  • 广州网站开发多少钱seo优化的基本流程
  • seo网站优化课程口碑好的常州做网站
  • 自己做网站需要备案么网站开发三步
  • 中海外城市建设有限公司网站营销型网站建设明细报
  • 沈阳建设网站公司wordpress导航怎么添加连接
  • 网站建设及空间为什么做网站推广
  • 网站规划与网页设计深圳企业网站建设费用
  • 谷歌认证合作伙伴网站建设哈尔滨 做网站公司有哪些
  • 无限动力营销型网站建设阳江网络推广公司
  • 怎样用手机建个人网站禅城网站制作
  • 网站快备案阿里云买完域名空间如何做网站
  • 动易网站 自定义邮箱手机网站开发技巧
  • 巩义网站建设费用多少关键词优化软件
  • 优秀的网站举例如何做网络营销推广工作
  • 校园网站建设的优点信阳做网站公司汉狮价格
  • 抄底券网站怎么做的网页设计的概念是什么
  • 车机油哪个网站做的好网站建设公司挣钱吗
  • vps网站如何绑定多个域名基于vue的毕业设计题目
  • seopc流量排名网站wordpress 用户 评论
  • 网站如何做图片自动切换家装设计师培训学校学费
  • 如何做自己的个人网站查询网站入口
  • 网站建设合同标准版wordpress图片缩略图不显示图片
  • 网站备案名字填写做照片书网站
  • 360网站名片怎么做的怎么做asp网站
  • 有哪些企业可以做招聘的网站有哪些网站怎么做搜索引擎才能收录
  • 网站怎么做悬浮图片北京高端网站建设入门
  • 公司网站建设设计广东网站开发软件
  • 免费注册企业网站php的网站有哪些
  • 网站的ftp上传地址wordpress 双语主题
  • 手机网站建站教程杭州市建设网杭州造价平台