返回

Android Sunflower:Jetpack 的开发者指南

Android

在 Google I/O 2018 开发者大会上,我们盛大推出 Android Jetpack,这是一系列 Android 开发架构组件,旨在帮助您简化开发流程,打造优质应用。凭借 Jetpack 组件,开发者可以轻松掌握最佳实践,减少样板代码,简化复杂任务,从而将精力集中在真正重要的事情上。

Android Sunflower 是 Jetpack 组件的一个示例,它展示了如何利用这些组件构建出色的 Android 应用。这个应用是一个花园管理应用,用户可以在其中种植、照料和分享他们的植物。

本指南将逐步指导您完成 Android Sunflower 应用的构建过程。我们将探讨 Jetpack 组件,例如 LiveData、ViewModel 和 Navigation,并展示如何将它们用于构建响应式、可维护和易于测试的应用。

前提条件

在开始之前,请确保您已满足以下要求:

  • 具有 Android Studio 3.2 或更高版本。
  • 熟悉 Kotlin 编程语言。
  • 了解 Android 开发的基本知识。

入门

首先,创建一个新的 Android Studio 项目,并将其命名为 "Sunflower"。选择“空活动”(Empty Activity)模板,然后单击“下一步”。

在下一个屏幕上,填写应用程序的详细信息,然后单击“完成”。

Android Studio 将创建您的项目,并打开主活动文件(MainActivity.kt)。

了解 Jetpack 组件

Jetpack 组件是一组库,可帮助您简化 Android 开发的各个方面。这些组件基于以下原则:

  • 架构明确: 组件遵循明确的架构模式,例如 MVVM 和 MVP。
  • 可测试性: 组件易于测试,有助于确保您的代码可靠。
  • 可维护性: 组件可重用,并遵循清晰的 API,使您的代码易于维护。

LiveData

LiveData 是一个数据持有者类,它可观察数据的更改并通知观察者。这是在 Android 应用中管理可变数据的理想方式,因为它简化了数据管理并减少了样板代码。

在 Sunflower 应用中,我们将使用 LiveData 来存储用户植物列表。

class PlantListViewModel(private val plantRepository: PlantRepository) : ViewModel() {

    val plants = plantRepository.getPlants()
}

ViewModel

ViewModel 是一个与 Activity 或 Fragment 生命周期无关的数据类。它用于存储与 UI 无关的数据,例如应用状态或用户首选项。

在 Sunflower 应用中,我们将使用 ViewModel 来存储用户植物列表,即使用户离开并重新打开应用,也能保持列表的持久性。

class PlantListFragment : Fragment() {

    private val viewModel: PlantListViewModel by viewModels()

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        val view = inflater.inflate(R.layout.fragment_plant_list, container, false)
        val adapter = PlantListAdapter()
        view.findViewById<RecyclerView>(R.id.plant_list).adapter = adapter
        subscribeUi(adapter)
        return view
    }

    private fun subscribeUi(adapter: PlantListAdapter) {
        viewModel.plants.observe(viewLifecycleOwner) { plants ->
            adapter.submitList(plants)
        }
    }
}

Navigation

Navigation 组件提供了一种在应用的不同目的地之间导航的声明性方法。它简化了导航逻辑,并使应用的导航结构更易于理解。

在 Sunflower 应用中,我们将使用 Navigation 组件在用户植物列表和植物详情屏幕之间导航。

class PlantListFragment : Fragment() {

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        view.findViewById<Button>(R.id.add_plant_button).setOnClickListener {
            findNavController().navigate(R.id.action_plantListFragment_to_addPlantFragment)
        }
    }
}

构建应用

现在我们已经了解了 Jetpack 组件,让我们开始构建 Sunflower 应用。

1. 创建数据层

我们将使用 Room 库来创建数据库,用于存储用户植物。

@Database(entities = [Plant::class], version = 1)
abstract class AppDatabase : RoomDatabase() {

    abstract fun plantDao(): PlantDao
}

2. 创建数据仓库

数据仓库提供了一个抽象层,使我们能够与数据库和网络服务交互。

class PlantRepository(private val database: AppDatabase) {

    fun getPlants(): LiveData<List<Plant>> = database.plantDao().getPlants()
}

3. 创建 UI

我们将使用 Data Binding 和 RecyclerView 来创建 UI。

<layout xmlns:android="http://schemas.android.com/apk/res/android">

    <data>
        <variable
            name="plant"
            type="com.example.sunflower.data.Plant" />
    </data>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <ImageView
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:src="@{plant.imageUrl}" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{plant.name}" />
    </LinearLayout>
</layout>

4. 运行应用

现在,我们可以运行应用并查看我们构建的 UI。

结论

恭喜您!您已使用 Jetpack 组件成功构建了一个 Android 应用。通过利用 LiveData、ViewModel 和 Navigation 等组件,您能够创建响应式、可维护且易于测试的应用。

有关 Jetpack 组件的更多信息,请参阅以下资源:

我希望本指南对您有所帮助。如果您有任何问题或意见,请随时与我联系。