Android:是不是可以将两个全屏片段链接到一个活动(只使用一个,但选择正确的一个有逻辑)?
Posted
技术标签:
【中文标题】Android:是不是可以将两个全屏片段链接到一个活动(只使用一个,但选择正确的一个有逻辑)?【英文标题】:Android: Is it possible to link two full screen fragments to one activity (useing just one, but choose the right one with logic)?Android:是否可以将两个全屏片段链接到一个活动(只使用一个,但选择正确的一个有逻辑)? 【发布时间】:2021-04-13 09:22:07 【问题描述】:我昨天有一个想法,我想问你这是否有效以及如何。 所以我使用一个表单来获取用户输入并将其保存到数据库中。 我为此任务使用了一个活动: https://i.stack.imgur.com/zZMOi.png 现在我想添加另一个具有相同布局但逻辑不同的任务。 用户应该能够编辑数据(相同的布局,但编辑数据库中的信息而不是创建新对象)。
我的想法:
当用户想要启动创建或编辑功能时,应该打开DataActivity
。
DataActivity
包含两个全屏片段,应该能够启动正确的片段。
是否可以将两个全屏片段链接到一个活动?
【问题讨论】:
我建议你改进你的问题,特别是尽量不要添加图片,看这里=>Why not upload images of code/errors when asking a question? 【参考方案1】:您可以执行以下操作,
添加两个按钮,save
和 edit
,使用 onClickListeners 打开 save_fragment
和 edit_fragment
,并在 edit_fragment
中确保有一个 Spinner 将数据库中的条目加载到 edit_fragment
这涉及到一点编码
因此,更好的方法是使用Room
创建数据库,在您各自的Dao
中,您可以为更新方法指定replace
冲突策略,该策略用新数据覆盖/更新旧数据
@Dao
interface YourDao
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insert(formData : FormData)
查看官方文档以获取有关Room 和onConflict Strategies 的更多信息
【讨论】:
感谢您的回答!这个解决方案听起来不错。我正在使用Room
。片段的布局是相同的。我可以只使用一个片段但像这样设置一个 if 语句吗?带有信息的意图字符串:编辑或创建对象,如果其编辑字符串选项=意图...; if(option=="edit") (这里我在 DAO 中使用 replace 方法) if(option == "create") (在 DAO 中使用 create 方法)
我想你可以,在你的实体类中使用title
或primarykey
,在同一个片段中,只需一个按钮从dao
调用insert
。如果对象具有相同的primarykey
,则它会被更新,否则它会第一次被创建【参考方案2】:
您的问题“是否可以将两个全屏片段链接到一个活动?”的简单答案是可以,您可以根据需要附加任意数量的片段到同一个活动,只要你在宿主活动中正确处理这些片段。
有很多与该主题相关的示例和用法。我建议你看看这个指南:https://developer.android.com/guide/fragments,这样你就可以大致了解片段的使用方式。
以下是与您在问题中提到的案例相关的非常简单代码示例:
MainActivity.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()
activity_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_
android:layout_
tools:context=".MainActivity">
<FrameLayout
android:id="@+id/fragment_container"
android:layout_
android:layout_/>
</androidx.constraintlayout.widget.ConstraintLayout>
当然 Fragment1 和 Fragment2 是两个示例空白片段。
【讨论】:
谢谢你的回答,我会试试这个解决方案!以上是关于Android:是不是可以将两个全屏片段链接到一个活动(只使用一个,但选择正确的一个有逻辑)?的主要内容,如果未能解决你的问题,请参考以下文章
如何通过单击 Android 中的按钮使 VideoView 全屏显示?
将相同的图库图像加载到两个不同的活动片段中 Android Picasso