Android 中的 Jetpack LiveData 示例
Android Jetpack 是一套库,可帮助开发人员遵循最佳实践、减少样板代码并编写跨 Android 版本和设备一致运行的代码,以便开发人员可以专注于他们关心的代码。在这里,我们将在 Android Studio 中实现 Jetpack Live Data。
我们将在本文中构建什么?
下面显示了我们将在本文中构建的示例视频。请注意,我们将用Java语言实现这个项目。
分步实施
步骤 1. 创建一个新项目
- 打开一个新项目。
- 我们将使用Java语言开发 Empty Activity。保持所有其他选项不变。
- 在您方便的时候命名应用程序。
- 将有两个名为 activity_main.xml 和 MainActivity 的默认文件。Java
如果您不知道如何在 Android Studio 中创建新项目,可以参考如何在 Android Studio 中创建/启动新项目?
步骤 2. 添加所需的依赖项
导航到 Gradle scripts > build.gradle(module) 并在其中使用以下依赖项-
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
步骤 3. 处理 XML 文件
导航到 app > res > layout > activity_main.xml 并将以下代码添加到该文件。下面是activity_main.xml文件的代码。
XML
XML
Java
package com.example.jetpacklivedata;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProvider;
import androidx.lifecycle.ViewModelProviders;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.EditText;
public class MainActivity extends AppCompatActivity {
// Initialize variables
EditText editText;
MainViewModel mainViewModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Assign variables
editText=findViewById(R.id.et_text);
// Initialize view model
mainViewModel= ViewModelProviders.of(MainActivity.this)
.get(MainViewModel.class);
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
// When text change
// Update view model text
mainViewModel.setText(String.valueOf(charSequence));
}
@Override
public void afterTextChanged(Editable editable) {
}
});
// Initialize fragment
Fragment fragment=new MainFragment();
// Open Fragment
getSupportFragmentManager().beginTransaction().replace(R.id.frame_layout,fragment).commit();
}
}
Java
package com.example.jetpacklivedata;
import android.os.Bundle;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProviders;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
public class MainFragment extends Fragment {
// Initialize variable
TextView tvResult;
MainViewModel mainViewModel;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Initialize view
View view=inflater.inflate(R.layout.fragment_main, container, false);
// Assign variable
tvResult=view.findViewById(R.id.tv_result);
// Check condition
if(getActivity()!=null){
// When activity is not null
// Initialize view model
mainViewModel= ViewModelProviders.of(getActivity())
.get(MainViewModel.class);
// Set observer on get text method
mainViewModel.getText().observe(getActivity(), new Observer() {
@Override
public void onChanged(String s) {
// When text change
// set result text on text view
tvResult.setText(s);
}
});
}
// return view
return view;
}
}
Java
package com.example.jetpacklivedata;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;
public class MainViewModel extends ViewModel {
// Initialize variable
MutableLiveData mutableLiveData
= new MutableLiveData<>();
// Create set text method
public void setText(String s)
{
// Set value
mutableLiveData.setValue(s);
}
// Create get text method
public MutableLiveData getText()
{
// return value
return mutableLiveData;
}
}
导航到应用程序 > 右键单击 > 新建 > 片段 > 空白片段。将其命名为 MainFragment 并在fragment_main.xml文件中使用以下代码 -
XML
第 4 步:处理Java文件
导航到MainActivity。 Java文件并在其中使用以下代码。代码中添加了注释以便更好地理解。
Java
package com.example.jetpacklivedata;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProvider;
import androidx.lifecycle.ViewModelProviders;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.EditText;
public class MainActivity extends AppCompatActivity {
// Initialize variables
EditText editText;
MainViewModel mainViewModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Assign variables
editText=findViewById(R.id.et_text);
// Initialize view model
mainViewModel= ViewModelProviders.of(MainActivity.this)
.get(MainViewModel.class);
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
// When text change
// Update view model text
mainViewModel.setText(String.valueOf(charSequence));
}
@Override
public void afterTextChanged(Editable editable) {
}
});
// Initialize fragment
Fragment fragment=new MainFragment();
// Open Fragment
getSupportFragmentManager().beginTransaction().replace(R.id.frame_layout,fragment).commit();
}
}
导航到MainFragment。 Java文件并在其中使用以下代码。代码中添加了注释以便更好地理解。
Java
package com.example.jetpacklivedata;
import android.os.Bundle;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProviders;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
public class MainFragment extends Fragment {
// Initialize variable
TextView tvResult;
MainViewModel mainViewModel;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Initialize view
View view=inflater.inflate(R.layout.fragment_main, container, false);
// Assign variable
tvResult=view.findViewById(R.id.tv_result);
// Check condition
if(getActivity()!=null){
// When activity is not null
// Initialize view model
mainViewModel= ViewModelProviders.of(getActivity())
.get(MainViewModel.class);
// Set observer on get text method
mainViewModel.getText().observe(getActivity(), new Observer() {
@Override
public void onChanged(String s) {
// When text change
// set result text on text view
tvResult.setText(s);
}
});
}
// return view
return view;
}
}
导航到应用 > 新建 > Java类。将其命名为 MainViewModel 并在 MainViewModel 中使用以下代码。 Java文件。
Java
package com.example.jetpacklivedata;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;
public class MainViewModel extends ViewModel {
// Initialize variable
MutableLiveData mutableLiveData
= new MutableLiveData<>();
// Create set text method
public void setText(String s)
{
// Set value
mutableLiveData.setValue(s);
}
// Create get text method
public MutableLiveData getText()
{
// return value
return mutableLiveData;
}
}
这是我们应用程序的最终输出。
输出: