android:是否可以将两个全屏片段链接到一个活动(只使用一个,但选择一个逻辑正确的)?

iovurdzv  于 2021-06-27  发布在  Java
关注(0)|答案(2)|浏览(394)

我昨天有个主意,我想问你这是否有效以及如何有效。所以我使用一个表单来获取用户输入并将其安全地保存到数据库中。我将活动用于此任务:https://i.stack.imgur.com/zzmoi.png 现在我想添加另一个布局相同但逻辑不同的任务。用户应该能够编辑数据(相同的布局,但编辑数据库中的信息,而不是创建新对象)。
我的想法是:a DataActivity 当用户想要启动create或edit函数时,应该打开。这个 DataActivity 包含两个全屏片段,应该能够启动正确的片段。是否可以将两个全屏片段链接到一个活动?

aurhwmvo

aurhwmvo1#

你可以这样做,
添加两个按钮, save 以及 edit 使用onclicklisteners打开 save_fragment 以及 edit_fragment 而在 edit_fragment 确保有一个微调器将数据库中的条目加载到 edit_fragment 哎哟,这需要一点编码
因此,更好的方法是使用 Room 在你们各自的 Dao 您可以指定 replace 用新数据覆盖/更新旧数据的更新方法的冲突策略

@Dao
interface YourDao{

    @Insert(onConflict = OnConflictStrategy.REPLACE)
    fun insert(formData : FormData)
}

查看官方文档了解更多关于房间和onconflict策略的信息

wr98u20j

wr98u20j2#

您的问题“是否可以将两个全屏片段链接到一个活动?”的简单答案是可以的,您可以将任意多个片段附加到同一个活动,只要您在宿主活动中正确处理这些片段。
与这个主题相关的例子和用法有很多。我建议你看看这本指南:https://developer.android.com/guide/fragments 所以你可以大致了解片段是如何使用的。
下面是一个与您在问题中提到的案例相关的非常简单的代码示例:
主要活动.kt

import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentTransaction

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        showProperFragment()
    }

    private fun showProperFragment() {

        var fragmentToShow: Fragment

        // todo: modify your condition here to decide whether showing fragment1 or fragment2
        if (true) {
            fragmentToShow = Fragment1.newInstance("something1", "something2")
        } else {
            fragmentToShow = Fragment2.newInstance("something1", "something2")
        }

        val transaction: FragmentTransaction = supportFragmentManager.beginTransaction()

        transaction.replace(R.id.fragment_container, fragmentToShow)
        transaction.addToBackStack(null)

        transaction.commit()
    }
}

活动\u main.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <FrameLayout
        android:id="@+id/fragment_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</androidx.constraintlayout.widget.ConstraintLayout>

当然,片段1和片段2是两个示例空白片段。

相关问题